home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / pcboard / dms110.zip / DMS001.ACP / DMS.PPE (.txt) < prev    next >
PCBoard Programming Language Executable  |  1996-06-16  |  36KB  |  2,309 lines

  1. ;------------------------------------------------------------------------------
  2. ;                                                   .ss.
  3. ;                                                   `²²'
  4. ;             .,sS$Ss,,s$  .,sS$$$Ss.  .,sS$Ss,,s$ .ss.  .sSs.
  5. ;           .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
  6. ;           $$$'   .$$$' $$$²Sçsµ²' .$$$'   .$$$'.$$$' .$$$'  `$$b.
  7. ;           $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$'    ;$$$
  8. ;           `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
  9. ;                                    .sS²°$$$²²°"'       d²°'
  10. ;                                  .$$²  .$$'
  11. ;                                  $$$.,d$$'
  12. ;                                  `²S$$S²'
  13. ;------------------------------------------------------------------------------
  14. ; P.P.L.X. 2.OO                          (C)1996 - Lone Runner / AEGiS CoRP'96 
  15. ;------------------------------------------------------------------------------
  16. ; PPE 3.1O (Encryption type I) - Analysis ON - Postprocessing ON
  17. ;------------------------------------------------------------------------------
  18.  
  19.     Boolean  BOOLEAN001
  20.     Boolean  BOOLEAN002
  21.     Boolean  BOOLEAN003
  22.     Boolean  BOOLEAN004
  23.     Boolean  BOOLEAN005
  24.     Boolean  BOOLEAN006
  25.     Boolean  BOOLEAN007
  26.     Boolean  BOOLEAN008
  27.     Boolean  BOOLEAN009
  28.     Boolean  BOOLEAN010
  29.     Boolean  BOOLEAN011
  30.     Boolean  BOOLEAN012
  31.     Boolean  BOOLEAN013
  32.     Boolean  BOOLEAN014
  33.     Boolean  BOOLEAN015
  34.     Boolean  BOOLEAN016
  35.     Boolean  BOOLEAN017
  36.     Boolean  BOOLEAN018
  37.     Boolean  BOOLEAN020
  38.     Boolean  BOOLEAN021
  39.     Date     DATE001
  40.     Date     DATE002
  41.     Integer  INTEGER001
  42.     Integer  INTEGER002
  43.     Integer  INTEGER003
  44.     Integer  INTEGER004
  45.     Integer  INTEGER005
  46.     Integer  INTEGER006
  47.     Integer  INTEGER008
  48.     Integer  INTEGER009
  49.     Integer  INTEGER011
  50.     String   STRING002
  51.     String   STRING003
  52.     String   STRING004
  53.     String   STRING005
  54.     String   STRING006
  55.     String   STRING007
  56.     String   STRING008
  57.     String   STRING009
  58.     String   STRING010
  59.     String   STRING011
  60.     String   STRING012
  61.     String   STRING013
  62.     String   STRING014
  63.     String   STRING015
  64.     String   STRING016
  65.     String   STRING017
  66.     String   STRING018
  67.     String   STRING019
  68.     String   STRING020
  69.     String   STRING021
  70.     String   STRING022
  71.     String   STRING023
  72.     String   STRING024
  73.     String   STRING025
  74.     String   STRING026
  75.     String   STRING027
  76.     String   STRING028
  77.     String   STRING032
  78.     String   STRING033
  79.     String   STRING034
  80.     String   STRING036
  81.     String   STRING037
  82.     String   STRING040
  83.     String   STRING041
  84.     String   STRING042
  85.     String   STRING043
  86.     String   STRING045
  87.     String   STRING046
  88.     String   STRING047
  89.     String   STRING048
  90.     String   STRING049
  91.     String   STRING050
  92.     String   STRING051
  93.     String   STRING052
  94.     String   STRING054
  95.     String   STRING057
  96.     String   STRING063
  97.     String   STRING064
  98.     String   STRING065
  99.     String   STRING066
  100.     String   STRING067
  101.     String   STRING068
  102.     String   STRING074
  103.     String   STRING076
  104.     String   STRING077
  105.     String   STRING078
  106.     Time     TIME001
  107.     Byte     BYTE001
  108.     Byte     BYTE002
  109.     Byte     BYTE003
  110.     Byte     BYTE004
  111.     Byte     BYTE005
  112.     Byte     BYTE006
  113.     Byte     BYTE007
  114.     Byte     BYTE008
  115.     Byte     BYTE009
  116.     Byte     BYTE010
  117.     Byte     BYTE011
  118.     Byte     BYTE012
  119.     Byte     BYTE013
  120.     Byte     BYTE014
  121.     Byte     BYTE015
  122.     Byte     BYTE016
  123.     Byte     BYTE017
  124.     Byte     BYTE018
  125.     Byte     BYTE019
  126.     Byte     BYTE020
  127.     Byte     BYTE021
  128.     Byte     BYTE022
  129.     Byte     BYTE023
  130.     Byte     BYTE024
  131.     Byte     BYTE025
  132.     Byte     BYTE026
  133.     Byte     BYTE027
  134.     Byte     BYTE028
  135.     Byte     BYTE029
  136.     Byte     BYTE030
  137.     Byte     BYTE031
  138.     Byte     BYTE032
  139.     Byte     BYTE033
  140.     Byte     BYTE035
  141.     Byte     BYTE037
  142.     Byte     BYTE038
  143.     Byte     BYTE039
  144.     Byte     BYTE040
  145.     Byte     BYTE041
  146.     Byte     BYTE042
  147.     Byte     BYTE043
  148.     Byte     BYTE044
  149.     Byte     BYTE045
  150.     Byte     BYTE046
  151.     Byte     BYTE047
  152.     Byte     BYTE048
  153.     Byte     BYTE053
  154.     Byte     BYTE054
  155.     Byte     BYTE055
  156.     Byte     BYTE060
  157.     Byte     BYTE061
  158.     Byte     BYTE062
  159.     Byte     BYTE063
  160.     Byte     BYTE064
  161.     Byte     BYTE065
  162.     Byte     BYTE066
  163.     Byte     BYTE067
  164.     Byte     BYTE069
  165.     Byte     BYTE070
  166.     Byte     BYTE071
  167.     Byte     BYTE072
  168.     Byte     BYTE073
  169.     Byte     BYTE074
  170.     Byte     BYTE075
  171.     Byte     BYTE076
  172.     Byte     BYTE077
  173.     Byte     BYTE078
  174.     Byte     BYTE080
  175.     Byte     BYTE082
  176.     Byte     BYTE085
  177.     Byte     BYTE086
  178.     Byte     BYTE090
  179.     Byte     BYTE091
  180.     Word     WORD001
  181.     Word     WORD002
  182.     Word     WORD003
  183.     Word     WORD004
  184.     Word     WORD005
  185.     Word     WORD006
  186.     Word     WORD007
  187.     Word     WORD008
  188.     Word     WORD009
  189.     Word     WORD010
  190.     Word     WORD011
  191.     Word     WORD012
  192.     Word     WORD013
  193.     Word     WORD014
  194.     Word     WORD015
  195.     BigStr   BIGSTR001
  196.     Declare  Function FUNCTION001(String STRING060, String STRING061, String STRING062) Boolean
  197.     Declare  Function FUNCTION002(Byte BYTE049, Byte BYTE050, Byte BYTE051, Byte BYTE052, String STRING035) Byte
  198.     Declare  Function FUNCTION003(Integer INTEGER012, String STRING056) Boolean
  199.     Declare  Function FUNCTION004(Integer INTEGER013, String STRING073) Boolean
  200.     Declare  Function FUNCTION005(Byte BYTE079) Boolean
  201.     Declare  Function FUNCTION006(Byte BYTE083) Boolean
  202.     Declare  Procedure PROC001(Boolean BOOLEAN019)
  203.     Declare  Procedure PROC002()
  204.     Declare  Procedure PROC003(String STRING031)
  205.     Declare  Procedure PROC004(Var Byte BYTE036)
  206.     Declare  Procedure PROC005(String STRING044, Byte BYTE068)
  207.     Declare  Procedure PROC006(String STRING053)
  208.     Declare  Procedure PROC007(String STRING038, String STRING039)
  209.     Declare  Procedure PROC008(Byte BYTE056, Byte BYTE057, Byte BYTE058, Byte BYTE059)
  210.     Declare  Procedure PROC009(String STRING069)
  211.     Declare  Procedure PROC010(Byte BYTE087, Var String STRING070, Var Byte BYTE088, Var String STRING071, Var Byte BYTE089, Var String STRING072)
  212.     Declare  Procedure PROC011(Byte BYTE034, Var String STRING029, Integer INTEGER007, String STRING030)
  213.     Declare  Procedure PROC012(Integer INTEGER010, String STRING055)
  214.     Declare  Procedure PROC013(Word WORD016, String STRING075)
  215.     Declare  Procedure PROC014()
  216.     Declare  Procedure PROC015(Byte BYTE081, Var String STRING058)
  217.     Declare  Procedure PROC016(Byte BYTE084, Var String STRING059)
  218.  
  219. ;------------------------------------------------------------------------------
  220.  
  221.     STRING002 = "DECOMPILATION OF COPYRIGHTED MATERIAL IS ILLEGAL"
  222.     STRING002 = "v1.10"
  223.     STRING003 = "Release"
  224.     BYTE027 = 0
  225.     BYTE028 = 0
  226.     STRING028 = ""
  227.     STRING003 = "<Compiled: 06-22-1996 16:48:49 " + STRING003 + ">"
  228.     Print "@QOFF@"
  229.     Color 7
  230.     If (GrafMode() == "R") Then
  231.         Cls
  232.         MPrintLn 
  233.         MPrintLn "!|1K|*|w0000270N12|10$SBARON$|#|#|#"
  234.         Color 31
  235.         Color 7
  236.     Endif
  237.     If ((Exist(PPEPath() + PPEName() + ".CFG") == 0) && (TokCount() == 0)) PROC003("(Error) Non-Existing ""DMS.CFG"" Config File")
  238.     FOpen 1, PPEPath() + PPEName() + ".CFG", 2, 0
  239.     FRead 1, BYTE025, 1
  240.     If ((BYTE025 < 2) && (TokCount() == 0)) Then
  241.         PROC003("(Error) Out-Dated ""DMS.CFG"" Config Version")
  242.     ElseIf ((BYTE025 > 2) && (TokCount() == 0)) Then
  243.         PROC003("(Error) Invalid/Unknown ""DMS.CFG"" Config Version")
  244.     Endif
  245.     If ((FileInf(PPEPath() + "DMS.CFG", 4) <> 734) && (TokCount() == 0)) Then
  246.         PROC003("(Error) Invalid ""DMS.CFG"" Config File-Format")
  247.     Endif
  248.     PROC011(1, STRING004, 64, "Unknown")
  249.     PROC011(1, STRING005, 25, "Sysop")
  250.     PROC011(1, STRING006, 20, "0")
  251.     FRead 1, STRING020, 2
  252.     BOOLEAN001 = (Right(STRING020, 1) == "Y")
  253.     FRead 1, STRING020, 2
  254.     BOOLEAN003 = (Right(STRING020, 1) == "Y")
  255.     FRead 1, STRING020, 2
  256.     BOOLEAN004 = (Right(STRING020, 1) == "Y")
  257.     FRead 1, STRING020, 2
  258.     BOOLEAN002 = (Right(STRING020, 1) == "Y")
  259.     FRead 1, STRING020, 2
  260.     BOOLEAN005 = (Right(STRING020, 1) == "Y")
  261.     FRead 1, STRING020, 2
  262.     BOOLEAN006 = (Right(STRING020, 1) == "Y")
  263.     FRead 1, STRING020, 2
  264.     BOOLEAN007 = (Right(STRING020, 1) == "Y")
  265.     FRead 1, STRING020, 2
  266.     BOOLEAN008 = (Right(STRING020, 1) == "Y")
  267.     FRead 1, STRING020, 2
  268.     BOOLEAN009 = (Right(STRING020, 1) == "Y")
  269.     FRead 1, STRING020, 2
  270.     BYTE032 = Right(STRING020, 1)
  271.     PROC011(1, STRING007, 64, PPEPath())
  272.     PROC011(1, STRING008, 64, PPEPath())
  273.     PROC011(1, STRING009, 64, PPEPath())
  274.     PROC011(1, STRING023, 64, PPEPath())
  275.     FSeek 1, 231, 1
  276.     PROC011(1, STRING026, 12, "STATS")
  277.     PROC011(1, STRING027, 12, "NEWS")
  278.     PROC011(1, STRING024, 12, "WELCOME")
  279.     PROC011(1, STRING025, 12, "GOODBYE")
  280.     PROC011(1, STRING012, 12, "HELP")
  281.     FRead 1, DATE001, 2
  282.     If (DATE001 == 0) Then
  283.         DATE001 = Date() + 30
  284.         FSeek 1, -2, 1
  285.         FWrite 1, DATE001, 2
  286.     Endif
  287.     FRead 1, STRING020, 1
  288.     BYTE001 = Asc(STRING020)
  289.     FRead 1, STRING020, 1
  290.     BYTE002 = Asc(STRING020)
  291.     FRead 1, STRING020, 1
  292.     BYTE003 = Asc(STRING020)
  293.     FRead 1, STRING020, 1
  294.     BYTE004 = Asc(STRING020)
  295.     FRead 1, STRING020, 1
  296.     BYTE005 = Asc(STRING020)
  297.     FRead 1, STRING020, 1
  298.     BYTE006 = Asc(STRING020)
  299.     FRead 1, STRING020, 1
  300.     BYTE007 = Asc(STRING020)
  301.     FRead 1, STRING020, 1
  302.     BYTE008 = Asc(STRING020)
  303.     FRead 1, STRING020, 1
  304.     BYTE009 = Asc(STRING020)
  305.     FRead 1, STRING020, 1
  306.     BYTE010 = Asc(STRING020)
  307.     FRead 1, STRING020, 1
  308.     BYTE011 = Asc(STRING020)
  309.     FRead 1, STRING020, 1
  310.     BYTE012 = Asc(STRING020)
  311.     FRead 1, STRING020, 1
  312.     BYTE013 = Asc(STRING020)
  313.     FRead 1, STRING020, 1
  314.     BYTE014 = Asc(STRING020)
  315.     FRead 1, STRING020, 1
  316.     BYTE015 = Asc(STRING020)
  317.     FRead 1, STRING020, 1
  318.     BYTE016 = Asc(STRING020)
  319.     FRead 1, STRING020, 1
  320.     BYTE017 = Asc(STRING020)
  321.     FRead 1, STRING020, 1
  322.     BYTE018 = Asc(STRING020)
  323.     FRead 1, STRING020, 1
  324.     BYTE019 = Asc(STRING020)
  325.     FRead 1, STRING020, 1
  326.     BYTE020 = Asc(STRING020)
  327.     FRead 1, STRING020, 1
  328.     BYTE021 = Asc(STRING020)
  329.     FRead 1, STRING020, 1
  330.     BYTE022 = Asc(STRING020)
  331.     FRead 1, STRING020, 1
  332.     BYTE023 = Asc(STRING020)
  333.     FRead 1, STRING020, 1
  334.     BYTE024 = Asc(STRING020)
  335.     FRead 1, STRING020, 2
  336.     BOOLEAN010 = (Right(STRING020, 1) == "Y")
  337.     FRead 1, STRING020, 2
  338.     BOOLEAN011 = (Right(STRING020, 1) == "Y")
  339.     PROC011(1, STRING014, 12, "BCKGRND")
  340.     FRead 1, STRING020, 2
  341.     BOOLEAN012 = (Right(STRING020, 1) == "Y")
  342.     FClose 1
  343.     If (BYTE032 <> 0) Then
  344.         BYTE033 = 0
  345.         If (BYTE032 == "1") Then
  346.             STRING020 = U_Cmnt2
  347.         ElseIf ((BYTE032 >= "2") && (BYTE032 <= "6")) Then
  348.             STRING020 = U_Notes(BYTE032 - 2)
  349.         ElseIf (BYTE032 == "7") Then
  350.             TpaGet "BDATE", STRING020
  351.         Else
  352.             BYTE033 = 255
  353.         Endif
  354.         If (BYTE033 <> 255) Then
  355.             BYTE033 = Year(Date()) - Year(STRING020) - 1
  356.             If ((Month(Date()) > Month(STRING020)) || ((Month(Date()) == Month(STRING020)) && (Day(Date()) >= Day(STRING020)))) Inc BYTE033
  357.         Endif
  358.     Else
  359.         BYTE033 = 255
  360.     Endif
  361.     STRING017 = ""
  362.     If (Exist(STRING008 + "DMSTEXT" + LangExt())) STRING017 = LangExt()
  363.     If (Exist(STRING008 + "DMSTEXT" + STRING017) == 0) Then
  364.         PROC003("(Error) Non-Existing ""DMSTEXT"" Text File")
  365.     Endif
  366.     If (!Exist(STRING007 + "DMS" + String(CurConf()) + ".CNF") && (!BOOLEAN006 || (CurConf() == 0))) Then
  367.         DispText 276, 2048 + 32768 + 64 + 128
  368.         Newline
  369.         Wait
  370.         PROC001(1)
  371.     Endif
  372.     STRING018 = STRING008 + "DMSTEXT" + STRING017
  373.     STRING004 = RTrim(STRING004, Chr(32))
  374.     STRING005 = RTrim(STRING005, Chr(32))
  375.     If (BOOLEAN001) Then
  376.         Log "Caller Logging Activated", 0
  377.         Log "-- Door Menu System (Opened) at (" + String(Time()) + ") --", 1
  378.         Log "Board : " + STRING004, 0
  379.         Log "Sysop : " + STRING005, 0
  380.         If (FUNCTION001(STRING004, STRING005, STRING006)) Log "* Registered Copy * (Thanks)", 0
  381.     Endif
  382.     If (BOOLEAN010) PROC014()
  383.     If (BOOLEAN002) Then
  384.         RdUNet PcbNode()
  385.         If (ChatStat()) Then
  386.             WrUNet PcbNode(), "A", UN_Name(), "Door Menu System", "", ""
  387.             Goto LABEL001
  388.         Endif
  389.         WrUNet PcbNode(), "U", UN_Name(), "Door Menu System", "", ""
  390.     Endif
  391.     :LABEL001
  392.     If ((FUNCTION001(STRING004, STRING005, STRING006) == 0) || (BOOLEAN003 == 1)) Then
  393.         PROC002()
  394.         Newline
  395.         If (Exist(STRING009 + STRING024)) Goto LABEL002
  396.         FCreate 1, STRING009 + STRING024, 2, 0
  397.         FClose 1
  398.         :LABEL002
  399.         DispFile STRING009 + STRING024, 1 + 4 + 2
  400.         Delay 10
  401.         If (FUNCTION001(STRING004, STRING005, STRING006) == 0) If BOOLEAN001 Log "- Unregistered Evaluation Copy -", 0
  402.         If ((FUNCTION001(STRING004, STRING005, STRING006) == 0) && (Date() >= DATE001)) Then
  403.             Newline
  404.             Color 7
  405.             PrintLn "[THIRTY DAY EVALUATION PERIOD EXPIRED]"
  406.             Delay 150
  407.         Endif
  408.     Else
  409.         Newline
  410.         If (Exist(STRING009 + STRING024)) Goto LABEL003
  411.         FCreate 1, STRING009 + STRING024, 2, 0
  412.         FClose 1
  413.         :LABEL003
  414.         DispFile STRING009 + STRING024, 1 + 4 + 2
  415.     Endif
  416.     StartDisp 1
  417.     If (Exist(STRING009 + STRING027) && ((FileInf(STRING009 + STRING027, 2) > U_LDate()) || ((FileInf(STRING009 + STRING027, 2) == U_LDate()) && (FileInf(STRING009 + STRING027, 3) >= U_LTime())))) Then
  418.         Color 7
  419.         Cls
  420.         StartDisp 2
  421.         Print "@QON@"
  422.         DispFile STRING009 + STRING027, 1 + 4 + 2
  423.         Newline
  424.         Wait
  425.         StartDisp 1
  426.         Print "@QOFF@"
  427.     Endif
  428.     If (TokCount() <> 0) Then
  429.         GetToken STRING020
  430.         While (TokCount() <> 0) Do
  431.             STRING028 = STRING028 + GetToken() + Chr(59)
  432.         EndWhile
  433.         STRING028 = RTrim(STRING028, Chr(59))
  434.         STRING019 = STRING020
  435.         If (FUNCTION004(1, STRING020)) Goto LABEL004
  436.         If (Left(STRING021, Len(STRING019)) == STRING019) Then
  437.             PROC013(WORD001 - 1, STRING020)
  438.             PROC001(0)
  439.             Goto LABEL004
  440.         Endif
  441.         PROC009(ReadLine(STRING018, 26))
  442.         PROC001(0)
  443.         :LABEL004
  444.         PROC013(WORD001 - 1, STRING020)
  445.         PROC001(0)
  446.     Endif
  447.     Cls
  448.     :LABEL005
  449.     If (((GrafMode() == "R") || (GrafMode() == "G")) && Exist(STRING009 + STRING014)) DispFile STRING009 + STRING014, 1 + 4 + 2
  450.     PROC004(BYTE029)
  451.     PROC010(BYTE029, STRING022, BYTE030, STRING020, BYTE031, STRING015)
  452.     If (BOOLEAN001) Log "Selected [" + String(BYTE029) + "] Category", 0
  453.     If ((BYTE030 > CurSec()) || (BYTE031 > BYTE033)) Then
  454.         PROC009(ReplaceStr(ReadLine(STRING018, 17), "@AREA@", STRING022))
  455.         Color 7
  456.         Cls
  457.         Goto LABEL005
  458.     Endif
  459.     Cls
  460.     If ((Len(RTrim(STRING015, Chr(32))) == 0) && BOOLEAN012) STRING015 = STRING014
  461.     If (((GrafMode() == "R") || (GrafMode() == "G")) && Exist(STRING009 + STRING015)) DispFile STRING009 + STRING015, 1 + 4 + 2
  462.     PROC007(STRING022, STRING020)
  463.     Color 7
  464.     Cls
  465.     Goto LABEL005
  466.     End
  467.  
  468. ;------------------------------------------------------------------------------
  469.  
  470.     Procedure PROC011(Byte BYTE034, Var String STRING029, Integer INTEGER007, String STRING030)
  471.  
  472.     Byte     BYTE035
  473.  
  474.     FRead BYTE034, BYTE035, 1
  475.     FRead BYTE034, STRING029, BYTE035
  476.     FSeek BYTE034, INTEGER007 - BYTE035, 1
  477.     If (Len(RTrim(STRING029, Chr(32))) == 0) STRING029 = STRING030
  478.  
  479.     EndProc
  480.  
  481.  
  482. ;------------------------------------------------------------------------------
  483.  
  484.     Procedure PROC003(String STRING031)
  485.  
  486.     Newline
  487.     Print STRING031
  488.     Newline
  489.     Log "[DMS] " + STRING031, 0
  490.     PROC001(1)
  491.  
  492.     EndProc
  493.  
  494.  
  495. ;------------------------------------------------------------------------------
  496.  
  497.     Procedure PROC004(Var Byte BYTE036)
  498.  
  499.     Byte     BYTE037
  500.     Byte     BYTE038
  501.     Byte     BYTE039
  502.     Byte     BYTE040
  503.     Byte     BYTE041
  504.     Byte     BYTE042
  505.     Byte     BYTE043
  506.     Byte     BYTE044
  507.     Byte     BYTE045
  508.     Byte     BYTE046
  509.     Byte     BYTE047
  510.     Byte     BYTE048
  511.     String   STRING032
  512.     String   STRING033
  513.     String   STRING034
  514.     Boolean  BOOLEAN013
  515.     Word     WORD006
  516.  
  517.     If (!Exist(STRING007 + "DMS" + String(CurConf()) + ".CNF") && BOOLEAN006) Then
  518.         If (BOOLEAN001) Log "Defaulting to ""Main Board"" Conference", 0
  519.         WORD006 = 0
  520.     Else
  521.         WORD006 = CurConf()
  522.     Endif
  523.     INTEGER001 = (FileInf(STRING007 + "DMS" + String(WORD006) + ".CNF", 4) - 1) / 60
  524.     If ((FUNCTION001(STRING004, STRING005, STRING006) == 0) && (INTEGER001 > 4)) INTEGER001 = 4
  525.     BYTE046 = INTEGER001 / 17
  526.     If (INTEGER001 % 17 <> 0) Inc BYTE046
  527.     If (BYTE027 <> 0) Then
  528.         INTEGER002 = BYTE027
  529.         BYTE027 = 0
  530.     Else
  531.         INTEGER002 = 0
  532.     Endif
  533.     If (INTEGER001 > 17) INTEGER001 = 17
  534.     :LABEL006
  535.     BOOLEAN013 = 0
  536.     If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  537.         BYTE037 = 15
  538.         BYTE039 = 12 - 3 + INTEGER001 / 2
  539.         BYTE038 = 65
  540.         BYTE040 = 12 + 3 + INTEGER001 / 2
  541.         If (INTEGER001 % 2 == 0) Dec BYTE040
  542.         If (BYTE028 <> 0) Then
  543.             BYTE044 = BYTE028
  544.             BYTE028 = 0
  545.             Goto LABEL007
  546.         Endif
  547.         BYTE044 = 0
  548.         :LABEL007
  549.         PROC008(BYTE037, BYTE039, BYTE038, BYTE040)
  550.         STRING033 = ReadLine(STRING018, 2)
  551.         AnsiPos 40 - Len(StripAtx(STRING033)) / 2, BYTE039 + 1
  552.         Print STRING033
  553.         STRING033 = ReadLine(STRING018, 3)
  554.         AnsiPos 40 - Len(StripAtx(STRING033)) / 2, BYTE040 - 1
  555.         Print STRING033
  556.     Endif
  557.     FOpen 1, STRING007 + "DMS" + String(WORD006) + ".CNF", 2, 0
  558.     If ((FileInf(STRING007 + "DMS" + String(WORD006) + ".CNF", 4) - 1) % 60 <> 0) Then
  559.         PROC009(" - Invalid ""DMS" + String(WORD006) + ".CNF"" Area File-Format - ")
  560.         PROC001(0)
  561.     Endif
  562.     FRead 1, BYTE025, 1
  563.     If (BYTE025 < 2) Then
  564.         PROC009(" - Out-Dated ""DMS" + String(WORD006) + ".CNF"" Config Version - ")
  565.         PROC001(0)
  566.     ElseIf (BYTE025 > 2) Then
  567.         PROC009(" - Invalid/Unknown ""DMS" + String(WORD006) + ".CNF"" Config Version - ")
  568.         PROC001(0)
  569.     Endif
  570.     While (0 == 0) Do
  571.         If ((GrafMode() == "A") || (GrafMode() == "N")) Then
  572.             Newline
  573.             OpText String(BYTE044 + 1) + "/" + String(BYTE046)
  574.             PrintLn ReadLine(STRING018, 4)
  575.             Newline
  576.         Endif
  577.         STRING032 = "?!*"
  578.         BYTE041 = 0
  579.         FSeek 1, (BYTE044 * 17) * 60 + 1, 0
  580.         For WORD001 = 1 To INTEGER001
  581.             If (BOOLEAN013 == 0) Then
  582.                 PROC011(1, STRING033, 35, "")
  583.                 PROC011(1, STRING034, 8, "")
  584.                 FRead 1, BYTE042, 1
  585.                 FRead 1, BYTE048, 1
  586.                 FSeek 1, 13, 1
  587.                 BYTE047 = 0
  588.                 If (Len(STRING034) <> 0) BYTE047 = FileInf(STRING007 + STRING034 + ".CAT", 4) / 257
  589.             Endif
  590.             If (Ferr(1) || BOOLEAN013) Then
  591.                 BOOLEAN013 = 1
  592.                 If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  593.                     AnsiPos BYTE037 + 1, BYTE039 + 2 + WORD001
  594.                     Print Space(49)
  595.                 Endif
  596.                 Continue
  597.             Endif
  598.             Inc BYTE041
  599.             If ((GrafMode() <> "A") && (GrafMode() <> "N")) AnsiPos BYTE037 + 1, BYTE039 + 2 + WORD001
  600.             Color BYTE019
  601.             Print Space(2)
  602.             Color BYTE023
  603.             Print Chr(40)
  604.             Color BYTE024
  605.             Print Chr(64 + WORD001)
  606.             Color BYTE023
  607.             Print Chr(41)
  608.             Color BYTE019
  609.             Print Chr(32)
  610.             STRING032 = STRING032 + Chr(64 + WORD001)
  611.             If ((CurSec() < BYTE042) || (BYTE033 < BYTE048)) Then
  612.                 Color BYTE022
  613.             Else
  614.                 Color BYTE021
  615.             Endif
  616.             Print Left(STRING033, 37)
  617.             Print Left(BYTE047, 4)
  618.             Color BYTE019
  619.             Print Space(2)
  620.             If ((GrafMode() == "A") || (GrafMode() == "N")) Newline
  621.         Next
  622.         FRead 1, STRING033, 60
  623.         BOOLEAN013 = Ferr(1)
  624.         If ((GrafMode() == "A") || (GrafMode() == "N")) Newline
  625.         If (((BOOLEAN013 && (BYTE044 <> 0)) && (GrafMode() <> "A")) && (GrafMode() <> "N")) Then
  626.             Color BYTE018
  627.             STRING033 = ReadLine(STRING018, 5)
  628.             AnsiPos BYTE038 - 2 + Len(StripAtx(STRING033)), BYTE040 - 2
  629.             Print Replace(Space(Len(StripAtx(STRING033))), Chr(32), Chr(BYTE009))
  630.         Endif
  631.         If ((BOOLEAN013 == 0) && FUNCTION001(STRING004, STRING005, STRING006)) Then
  632.             If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  633.                 STRING033 = ReadLine(STRING018, 5)
  634.                 AnsiPos BYTE038 - 2 + Len(StripAtx(STRING033)), BYTE040 - 2
  635.                 Print STRING033
  636.                 Goto LABEL008
  637.             Endif
  638.             Print ReadLine(STRING018, 6) + Chr(32)
  639.             :LABEL008
  640.             STRING032 = STRING032 + Chr(16) + Chr(43)
  641.         Endif
  642.         If (BYTE044 <> 0) Then
  643.             If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  644.                 STRING033 = ReadLine(STRING018, 7)
  645.                 AnsiPos BYTE038 - 2 + Len(StripAtx(STRING033)), BYTE039 + 2
  646.                 Print STRING033
  647.                 Goto LABEL009
  648.             Endif
  649.             Print ReadLine(STRING018, 8) + Chr(32)
  650.             :LABEL009
  651.             STRING032 = STRING032 + Chr(17) + Chr(45)
  652.         Endif
  653.         If ((((BYTE044 <> 0) || !BOOLEAN013) && FUNCTION001(STRING004, STRING005, STRING006)) && ((GrafMode() <> "A") && (GrafMode() <> "N"))) Then
  654.             STRING033 = ReplaceStr(ReplaceStr(ReadLine(STRING018, 20), "@PAGE@", BYTE044 + 1), "@TOTAL@", BYTE046)
  655.             AnsiPos BYTE037 + 2, BYTE040 - 2
  656.             Color BYTE018
  657.             Print Chr(BYTE009)
  658.             Print STRING033
  659.             Color BYTE018
  660.             Print Chr(BYTE009)
  661.         Endif
  662.         If ((GrafMode() == "A") || (GrafMode() == "N")) PrintLn ReadLine(STRING018, 9)
  663.         If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  664.             FClose 1
  665.             BYTE043 = FUNCTION002(BYTE037 + 2, BYTE039 + 3, 47, BYTE041 - 1, STRING032)
  666.             FOpen 1, STRING007 + "DMS" + String(WORD006) + ".CNF", 2, 0
  667.         Else
  668.             FClose 1
  669.             InputStr ReadLine(STRING018, 10), STRING033, 7, 1, Replace(Replace(STRING032, Chr(16), "/"), Chr(17), "\") + "X", 64 + 8
  670.             FOpen 1, STRING007 + "DMS" + String(WORD006) + ".CNF", 2, 0
  671.             BYTE026 = Asc(STRING033)
  672.             Select Case (Chr(BYTE026))
  673.                 Case "+"
  674.                     BYTE043 = 3
  675.                 Case "-"
  676.                     BYTE043 = 2
  677.                 Case "X"
  678.                     BYTE043 = 4
  679.                 Case "\"
  680.                     BYTE043 = 5
  681.                 Case "/"
  682.                     BYTE043 = 6
  683.                 Case "?"
  684.                     BYTE043 = 7
  685.                 Case "*"
  686.                     BYTE043 = 8
  687.                 Case "!"
  688.                     BYTE043 = 9
  689.                 Case Chr(0)
  690.                     If (InStr(STRING032, Chr(16)) <> 0) Then
  691.                         BYTE026 = Asc(43)
  692.                         BYTE043 = 3
  693.                     Else
  694.                         BYTE026 = Asc(88)
  695.                         BYTE043 = 4
  696.                     Endif
  697.                 Case Else
  698.                     BYTE043 = 1
  699.                 Endif
  700.         End Select
  701.         If ((BYTE026 == 43) && (BYTE043 == 1)) Then
  702.             BYTE043 = 3
  703.         ElseIf ((BYTE026 == 45) && (BYTE043 == 1)) Then
  704.             BYTE043 = 2
  705.         ElseIf ((BYTE026 == 63) && (BYTE043 == 1)) Then
  706.             BYTE043 = 7
  707.         ElseIf ((BYTE026 == 42) && (BYTE043 == 1)) Then
  708.             BYTE043 = 8
  709.         ElseIf ((BYTE026 == 33) && (BYTE043 == 1)) Then
  710.             BYTE043 = 9
  711.         Endif
  712.         If (BYTE043 == 0) Then
  713.             BYTE045 = INTEGER002 + 1
  714.             Break
  715.             Continue
  716.         Endif
  717.         If (BYTE043 == 1) Then
  718.             BYTE045 = BYTE026 - 65 + 1
  719.             Break
  720.             Continue
  721.         Endif
  722.         If (BYTE043 == 2) Then
  723.             Dec BYTE044
  724.             BOOLEAN013 = 0
  725.             INTEGER002 = 16
  726.             If (((BYTE044 == 0) && (GrafMode() <> "A")) && (GrafMode() <> "N")) Then
  727.                 Color BYTE018
  728.                 STRING033 = ReadLine(STRING018, 7)
  729.                 AnsiPos BYTE038 - 2 + Len(StripAtx(STRING033)), BYTE039 + 2
  730.                 Print Replace(Space(Len(StripAtx(STRING033))), Chr(32), Chr(BYTE009))
  731.             Endif
  732.             Color 7
  733.             Continue
  734.         Endif
  735.         If (BYTE043 == 3) Then
  736.             Inc BYTE044
  737.             BOOLEAN013 = 0
  738.             INTEGER002 = 0
  739.             Color 7
  740.             Continue
  741.         Endif
  742.         If (BYTE043 == 4) Then
  743.             BYTE045 = 0
  744.             Break
  745.             Continue
  746.         Endif
  747.         If (BYTE043 == 5) Then
  748.             BYTE044 = 0
  749.             BOOLEAN013 = 0
  750.             INTEGER002 = 0
  751.             If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  752.                 Color BYTE018
  753.                 STRING033 = ReadLine(STRING018, 7)
  754.                 AnsiPos BYTE038 - 2 + Len(StripAtx(STRING033)), BYTE039 + 2
  755.                 Print Replace(Space(Len(StripAtx(STRING033))), Chr(32), Chr(BYTE009))
  756.             Endif
  757.             Color 7
  758.             Continue
  759.         Endif
  760.         If (BYTE043 == 6) Then
  761.             BYTE044 = BYTE046 - 1
  762.             BOOLEAN013 = 0
  763.             INTEGER002 = 0
  764.             Color 7
  765.             Continue
  766.         Endif
  767.         If (((BYTE043 == 7) || (BYTE043 == 8)) || (BYTE043 == 9)) Then
  768.             FClose 1
  769.             If (BYTE043 == 7) Then
  770.                 STRING033 = STRING012
  771.                 Goto LABEL010
  772.             Endif
  773.             If (BYTE043 == 8) Then
  774.                 STRING033 = STRING026
  775.                 Goto LABEL010
  776.             Endif
  777.             If (BYTE043 == 9) Then
  778.                 STRING033 = STRING027
  779.             Endif
  780.             :LABEL010
  781.             If (BOOLEAN001) Log "Viewed (" + STRING033 + ") File", 0
  782.             Color 7
  783.             Cls
  784.             StartDisp 2
  785.             Print "@QON@"
  786.             DispFile STRING009 + STRING033, 1 + 4 + 2
  787.             Newline
  788.             Wait
  789.             StartDisp 1
  790.             Print "@QOFF@"
  791.             Color 7
  792.             Cls
  793.             Goto LABEL006
  794.         Endif
  795.     EndWhile
  796.     FClose 1
  797.     If (BYTE045 == 0) PROC001(0)
  798.     BYTE045 = BYTE045 + BYTE044 * 17
  799.     BYTE036 = BYTE045 - 1
  800.     BYTE027 = INTEGER002
  801.     BYTE028 = BYTE044
  802.     Color 7
  803.  
  804.     EndProc
  805.  
  806.  
  807. ;------------------------------------------------------------------------------
  808.  
  809.     Function FUNCTION002(Byte BYTE049, Byte BYTE050, Byte BYTE051, Byte BYTE052, String STRING035) Byte
  810.  
  811.     String   STRING036
  812.     String   STRING037
  813.     Byte     BYTE054
  814.     Byte     BYTE055
  815.     Byte     BYTE056
  816.  
  817.     STRING036 = ScrText(BYTE049, BYTE050 + INTEGER002, BYTE051, 1)
  818.     AnsiPos BYTE049, BYTE050 + INTEGER002
  819.     Color BYTE020
  820.     Print StripAtx(STRING036)
  821.     While (0 == 0) Do
  822.         STRING037 = ""
  823.         WORD001 = 0
  824.         While ((WORD001 < 100) && (Len(STRING037) == 0)) Do
  825.             Inc WORD001
  826.             STRING037 = Upper(Inkey())
  827.         EndWhile
  828.         If (BOOLEAN010) Then
  829.             FOpen 3, STRING013, 2, 0
  830.             If (FUNCTION006(3)) Then
  831.                 PROC016(3, STRING020)
  832.                 BYTE054 = GetX()
  833.                 BYTE055 = GetY()
  834.                 AnsiPos 1, BYTE050 + BYTE052 + 5
  835.                 Color 15
  836.                 ClrEol
  837.                 Print Space(40 - Len(STRING020) / 2) + STRING020
  838.                 AnsiPos BYTE054, BYTE055
  839.             Endif
  840.             If (FUNCTION005(3)) Then
  841.                 PROC015(3, STRING020)
  842.                 BYTE054 = GetX()
  843.                 BYTE055 = GetY()
  844.                 AnsiPos 1, BYTE050 + BYTE052 + 5
  845.                 Color 15
  846.                 ClrEol
  847.                 Print Space(40 - Len(STRING020) / 2) + STRING020
  848.                 AnsiPos BYTE054, BYTE055
  849.             Endif
  850.             FClose 3
  851.         Endif
  852.         If ((STRING037 == "DOWN") || (STRING037 == "2")) Then
  853.             If (INTEGER002 < BYTE052) Then
  854.                 AnsiPos BYTE049, BYTE050 + INTEGER002
  855.                 Print STRING036
  856.                 Inc INTEGER002
  857.                 STRING036 = ScrText(BYTE049, BYTE050 + INTEGER002, BYTE051, 1)
  858.                 AnsiPos BYTE049, BYTE050 + INTEGER002
  859.                 Color BYTE020
  860.                 Print StripAtx(STRING036)
  861.                 Goto LABEL011
  862.             Endif
  863.             If ((INTEGER002 >= BYTE052) && (InStr(STRING035, Chr(16)) <> 0)) Then
  864.                 FUNCTION002 = 3
  865.                 Break
  866.             Endif
  867.             :LABEL011
  868.             Continue
  869.         Endif
  870.         If ((STRING037 == "UP") || (STRING037 == "8")) Then
  871.             If (INTEGER002 > 0) Then
  872.                 AnsiPos BYTE049, BYTE050 + INTEGER002
  873.                 Print STRING036
  874.                 Dec INTEGER002
  875.                 STRING036 = ScrText(BYTE049, BYTE050 + INTEGER002, BYTE051, 1)
  876.                 AnsiPos BYTE049, BYTE050 + INTEGER002
  877.                 Color BYTE020
  878.                 Print StripAtx(STRING036)
  879.                 Goto LABEL012
  880.             Endif
  881.             If ((INTEGER002 <= 0) && (InStr(STRING035, Chr(17)) <> 0)) Then
  882.                 FUNCTION002 = 2
  883.                 Break
  884.             Endif
  885.             :LABEL012
  886.             Continue
  887.         Endif
  888.         If (((((STRING037 == "LEFT") || (STRING037 == "PGUP")) || (STRING037 == "-")) || (STRING037 == "4")) && (InStr(STRING035, Chr(17)) <> 0)) Then
  889.             FUNCTION002 = 2
  890.             Break
  891.             Continue
  892.         Endif
  893.         If (((((STRING037 == "RIGHT") || (STRING037 == "PGDN")) || (STRING037 == "+")) || (STRING037 == "6")) && (InStr(STRING035, Chr(16)) <> 0)) Then
  894.             FUNCTION002 = 3
  895.             Break
  896.             Continue
  897.         Endif
  898.         If (((STRING037 == "HOME") || (STRING037 == "\")) && (InStr(STRING035, Chr(17)) <> 0)) Then
  899.             FUNCTION002 = 5
  900.             Break
  901.             Continue
  902.         Endif
  903.         If (((STRING037 == "END") || (STRING037 == "/")) && (InStr(STRING035, Chr(16)) <> 0)) Then
  904.             FUNCTION002 = 6
  905.             Break
  906.             Continue
  907.         Endif
  908.         If (InStr(STRING035, STRING037) <> 0) Then
  909.             BYTE026 = Asc(STRING037)
  910.             FUNCTION002 = 1
  911.             Break
  912.             Continue
  913.         Endif
  914.         If (STRING037 == Chr(13)) Then
  915.             FUNCTION002 = 0
  916.             Break
  917.             Continue
  918.         Endif
  919.         If (STRING037 == Chr(27)) Then
  920.             FUNCTION002 = 4
  921.             Break
  922.             Continue
  923.         Endif
  924.         If (STRING037 == Chr(8)) Then
  925.             FUNCTION002 = 7
  926.             Break
  927.             Continue
  928.         Endif
  929.         If (STRING037 == Chr(22)) Then
  930.             FUNCTION002 = 8
  931.             Break
  932.             Continue
  933.         Endif
  934.         If (STRING037 == Chr(14)) Then
  935.             FUNCTION002 = 9
  936.             Break
  937.         Endif
  938.     EndWhile
  939.  
  940.     EndFunc
  941.  
  942.  
  943. ;------------------------------------------------------------------------------
  944.  
  945.     Procedure PROC008(Byte BYTE056, Byte BYTE057, Byte BYTE058, Byte BYTE059)
  946.  
  947.     Byte     BYTE060
  948.  
  949.     If ((GrafMode() == "A") || (GrafMode() == "N")) Goto LABEL013
  950.     Color 7
  951.     For BYTE060 = BYTE057 To BYTE059
  952.         If (Len(RTrim(ScrText(BYTE056, BYTE060, BYTE058 - BYTE056, 0), Chr(32))) <> 0) Then
  953.             AnsiPos BYTE056, BYTE060
  954.             Print Space(BYTE058 - BYTE056 + 1)
  955.         Endif
  956.     Next
  957.     Color BYTE019
  958.     AnsiPos BYTE056 + 1, BYTE057 + 1
  959.     Print Space(BYTE058 - BYTE056)
  960.     AnsiPos BYTE056 + 1, BYTE059 - 1
  961.     Print Space(BYTE058 - BYTE056)
  962.     AnsiPos BYTE056, BYTE057
  963.     Color BYTE012
  964.     Print Chr(BYTE003)
  965.     AnsiPos BYTE058, BYTE057
  966.     Color BYTE010
  967.     Print Chr(BYTE001)
  968.     AnsiPos BYTE056, BYTE059
  969.     Color BYTE017
  970.     Print Chr(BYTE008)
  971.     AnsiPos BYTE058, BYTE059
  972.     Color BYTE015
  973.     Print Chr(BYTE006)
  974.     Color BYTE011
  975.     AnsiPos BYTE056 + 1, BYTE057
  976.     Print Replace(Space(BYTE058 - BYTE056 - 1), Chr(32), Chr(BYTE002))
  977.     Color BYTE016
  978.     AnsiPos BYTE056 + 1, BYTE059
  979.     Print Replace(Space(BYTE058 - BYTE056 - 1), Chr(32), Chr(BYTE007))
  980.     Color BYTE013
  981.     For BYTE060 = BYTE057 + 1 To BYTE059 - 1
  982.         AnsiPos BYTE056, BYTE060
  983.         Print Chr(BYTE004)
  984.     Next
  985.     Color BYTE014
  986.     For BYTE060 = BYTE057 + 1 To BYTE059 - 1
  987.         AnsiPos BYTE058, BYTE060
  988.         Print Chr(BYTE005)
  989.     Next
  990.     Color BYTE018
  991.     AnsiPos BYTE056 + 1, BYTE057 + 2
  992.     Print Replace(Space(BYTE058 - BYTE056 - 1), Chr(32), Chr(BYTE009))
  993.     AnsiPos BYTE056 + 1, BYTE059 - 2
  994.     Print Replace(Space(BYTE058 - BYTE056 - 1), Chr(32), Chr(BYTE009))
  995.     :LABEL013
  996.  
  997.     EndProc
  998.  
  999.  
  1000. ;------------------------------------------------------------------------------
  1001.  
  1002.     Procedure PROC007(String STRING038, String STRING039)
  1003.  
  1004.     Byte     BYTE061
  1005.     Byte     BYTE062
  1006.     Byte     BYTE063
  1007.     Byte     BYTE064
  1008.     Byte     BYTE065
  1009.     Byte     BYTE066
  1010.     Byte     BYTE067
  1011.     Word     WORD007
  1012.     Word     WORD008
  1013.     Word     WORD009
  1014.     Word     WORD010
  1015.     Integer  INTEGER008
  1016.     Integer  INTEGER009
  1017.     String   STRING040
  1018.     String   STRING041
  1019.     String   STRING042
  1020.     String   STRING043
  1021.     Boolean  BOOLEAN014
  1022.     Boolean  BOOLEAN015
  1023.  
  1024.     BOOLEAN015 = 0
  1025.     :LABEL014
  1026.     WORD007 = FileInf(STRING007 + STRING039 + ".CAT", 4) / 260
  1027.     INTEGER009 = WORD007 / 17
  1028.     If (WORD007 % 17 <> 0) Inc INTEGER009
  1029.     If (WORD007 > 17) WORD007 = 17
  1030.     If (WORD007 == 0) Then
  1031.         PROC009(ReplaceStr(ReadLine(STRING018, 13), "@AREA@", STRING038))
  1032.     Else
  1033.         If (BOOLEAN009) Then
  1034.             BYTE061 = 6
  1035.             BYTE062 = 74
  1036.         Else
  1037.             BYTE061 = 10
  1038.             BYTE062 = 70
  1039.         Endif
  1040.         BYTE063 = 12 - 3 + WORD007 / 2
  1041.         BYTE064 = 12 + 3 + WORD007 / 2
  1042.         If (WORD007 % 2 == 0) Dec BYTE064
  1043.         If (!BOOLEAN015) INTEGER008 = 0
  1044.         BOOLEAN014 = 0
  1045.         PROC008(BYTE061, BYTE063, BYTE062, BYTE064)
  1046.         If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  1047.             STRING020 = ReplaceStr(ReadLine(STRING018, 14), "@AREA@", STRING038)
  1048.             AnsiPos 40 - Len(StripAtx(STRING020)) / 2, BYTE063 + 1
  1049.             Print STRING020
  1050.             STRING020 = ReadLine(STRING018, 3)
  1051.             AnsiPos 40 - Len(StripAtx(STRING020)) / 2, BYTE064 - 1
  1052.             Print STRING020
  1053.         Else
  1054.             Newline
  1055.         Endif
  1056.         If (!BOOLEAN015) INTEGER002 = 0
  1057.         FOpen 1, STRING007 + STRING039 + ".CAT", 2, 0
  1058.         While (0 == 0) Do
  1059.             STRING040 = "?!*"
  1060.             WORD010 = 0
  1061.             If ((GrafMode() == "A") || (GrafMode() == "N")) Then
  1062.                 Newline
  1063.                 OpText String(INTEGER008 + 1) + "/" + String(INTEGER009)
  1064.                 PrintLn ReplaceStr(ReadLine(STRING018, 15), "@AREA@", STRING038)
  1065.                 Newline
  1066.             Endif
  1067.             FSeek 1, (INTEGER008 * 17) * 260 + 1, 0
  1068.             For WORD009 = 1 To WORD007
  1069.                 If (BOOLEAN014 == 0) Then
  1070.                     PROC011(1, STRING020, 50, "Untitled")
  1071.                     PROC011(1, STRING043, 8, " NONE ")
  1072.                     FRead 1, BYTE066, 1
  1073.                     FRead 1, BYTE067, 1
  1074.                     If (Psa(7) && (PCBAccStat(0) == "2")) Then
  1075.                         FSeek 1, 88, 1
  1076.                         PROC011(1, STRING042, 7, "0")
  1077.                         PROC011(1, STRING041, 7, "0")
  1078.                         FSeek 1, 94, 1
  1079.                         Goto LABEL015
  1080.                     Endif
  1081.                     FSeek 1, 198, 1
  1082.                 Endif
  1083.                 :LABEL015
  1084.                 If (Ferr(1) || BOOLEAN014) Then
  1085.                     BOOLEAN014 = 1
  1086.                     If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  1087.                         AnsiPos BYTE061 + 1, BYTE063 + 2 + WORD009
  1088.                         If (BOOLEAN009) Then
  1089.                             Print Space(67)
  1090.                             Goto LABEL016
  1091.                         Endif
  1092.                         Print Space(59)
  1093.                     Endif
  1094.                     :LABEL016
  1095.                     Continue
  1096.                 Endif
  1097.                 Inc WORD010
  1098.                 If ((GrafMode() <> "A") && (GrafMode() <> "N")) AnsiPos BYTE061 + 1, BYTE063 + 2 + WORD009
  1099.                 Color BYTE019
  1100.                 Print Space(2)
  1101.                 Color BYTE023
  1102.                 Print Chr(40)
  1103.                 Color BYTE024
  1104.                 Print Chr(64 + WORD009)
  1105.                 Color BYTE023
  1106.                 Print Chr(41)
  1107.                 Color BYTE019
  1108.                 Print Chr(32)
  1109.                 STRING040 = STRING040 + Chr(64 + WORD009)
  1110.                 If ((((STRING043 == " NONE ") || (BYTE033 < BYTE067)) || (CurSec() < BYTE066)) || ((Psa(7) && (PCBAccStat(0) == "2")) && ((PCBAccStat(4) < STRING041) || (PCBAccStat(4) < STRING042)))) Then
  1111.                     Color BYTE022
  1112.                 Else
  1113.                     Color BYTE021
  1114.                 Endif
  1115.                 Print Left(STRING020, 51)
  1116.                 If (BOOLEAN009) Print Left(STRING043, 9)
  1117.                 Color BYTE019
  1118.                 If (BOOLEAN009) Then
  1119.                     Print Chr(32)
  1120.                 Else
  1121.                     Print Space(2)
  1122.                 Endif
  1123.                 If ((GrafMode() == "A") || (GrafMode() == "N")) Newline
  1124.             Next
  1125.             FRead 1, STRING020, 260
  1126.             BOOLEAN014 = Ferr(1)
  1127.             If ((GrafMode() == "A") || (GrafMode() == "N")) Newline
  1128.             If (((BOOLEAN014 && (INTEGER008 <> 0)) && (GrafMode() <> "A")) && (GrafMode() <> "N")) Then
  1129.                 Color BYTE018
  1130.                 STRING020 = ReadLine(STRING018, 5)
  1131.                 AnsiPos BYTE062 - 2 + Len(StripAtx(STRING020)), BYTE064 - 2
  1132.                 Print Replace(Space(Len(StripAtx(STRING020))), Chr(32), Chr(BYTE009))
  1133.             Endif
  1134.             If ((BOOLEAN014 == 0) && FUNCTION001(STRING004, STRING005, STRING006)) Then
  1135.                 If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  1136.                     STRING020 = ReadLine(STRING018, 5)
  1137.                     AnsiPos BYTE062 - 2 + Len(StripAtx(STRING020)), BYTE064 - 2
  1138.                     Print STRING020
  1139.                     Goto LABEL017
  1140.                 Endif
  1141.                 Print ReadLine(STRING018, 6) + Chr(32)
  1142.                 :LABEL017
  1143.                 STRING040 = STRING040 + Chr(16) + Chr(43)
  1144.             Endif
  1145.             If (INTEGER008 <> 0) Then
  1146.                 If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  1147.                     STRING020 = ReadLine(STRING018, 7)
  1148.                     AnsiPos BYTE062 - 2 + Len(StripAtx(STRING020)), BYTE063 + 2
  1149.                     Print STRING020
  1150.                     Goto LABEL018
  1151.                 Endif
  1152.                 Print ReadLine(STRING018, 8) + Chr(32)
  1153.                 :LABEL018
  1154.                 STRING040 = STRING040 + Chr(17) + Chr(45)
  1155.             Endif
  1156.             If ((((INTEGER008 <> 0) || !BOOLEAN014) && FUNCTION001(STRING004, STRING005, STRING006)) && ((GrafMode() <> "A") && (GrafMode() <> "N"))) Then
  1157.                 STRING020 = ReplaceStr(ReplaceStr(ReadLine(STRING018, 20), "@PAGE@", INTEGER008 + 1), "@TOTAL@", INTEGER009)
  1158.                 AnsiPos BYTE061 + 2, BYTE064 - 2
  1159.                 Color BYTE018
  1160.                 Print Chr(BYTE009)
  1161.                 Print STRING020
  1162.                 Color BYTE018
  1163.                 Print Chr(BYTE009)
  1164.             Endif
  1165.             If ((GrafMode() == "A") || (GrafMode() == "N")) PrintLn ReadLine(STRING018, 9)
  1166.             If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  1167.                 FClose 1
  1168.                 BYTE065 = FUNCTION002(BYTE061 + 2, BYTE063 + 3, BYTE062 - BYTE061 + 3, WORD010 - 1, STRING040)
  1169.                 FOpen 1, STRING007 + STRING039 + ".CAT", 2, 0
  1170.             Else
  1171.                 FClose 1
  1172.                 InputStr ReadLine(STRING018, 10), STRING020, 7, 1, Replace(Replace(STRING040, Chr(16), "/"), Chr(17), "\") + "X", 64 + 8
  1173.                 FOpen 1, STRING007 + STRING039 + ".CAT", 2, 0
  1174.                 BYTE026 = Asc(STRING020)
  1175.                 Select Case (Chr(BYTE026))
  1176.                     Case "+"
  1177.                         BYTE065 = 3
  1178.                     Case "-"
  1179.                         BYTE065 = 2
  1180.                     Case "X"
  1181.                         BYTE065 = 4
  1182.                     Case "\"
  1183.                         BYTE065 = 5
  1184.                     Case "/"
  1185.                         BYTE065 = 6
  1186.                     Case "?"
  1187.                         BYTE065 = 7
  1188.                     Case "*"
  1189.                         BYTE065 = 8
  1190.                     Case "!"
  1191.                         BYTE065 = 9
  1192.                     Case Chr(0)
  1193.                         If (InStr(STRING040, Chr(16)) <> 0) Then
  1194.                             BYTE026 = Asc(43)
  1195.                             BYTE065 = 3
  1196.                         Else
  1197.                             BYTE026 = Asc(88)
  1198.                             BYTE065 = 4
  1199.                         Endif
  1200.                     Case Else
  1201.                         BYTE065 = 1
  1202.                     Endif
  1203.             End Select
  1204.             If ((BYTE026 == 43) && (BYTE065 == 1)) Then
  1205.                 BYTE065 = 3
  1206.             ElseIf ((BYTE026 == 45) && (BYTE065 == 1)) Then
  1207.                 BYTE065 = 2
  1208.             ElseIf ((BYTE026 == 63) && (BYTE065 == 1)) Then
  1209.                 BYTE065 = 7
  1210.             ElseIf ((BYTE026 == 42) && (BYTE065 == 1)) Then
  1211.                 BYTE065 = 8
  1212.             ElseIf ((BYTE026 == 33) && (BYTE065 == 1)) Then
  1213.                 BYTE065 = 9
  1214.             Endif
  1215.             If (BYTE065 == 0) Then
  1216.                 WORD008 = INTEGER002 + 1
  1217.                 Break
  1218.                 Continue
  1219.             Endif
  1220.             If (BYTE065 == 1) Then
  1221.                 WORD008 = BYTE026 - 65 + 1
  1222.                 Break
  1223.                 Continue
  1224.             Endif
  1225.             If (BYTE065 == 2) Then
  1226.                 Dec INTEGER008
  1227.                 BOOLEAN014 = 0
  1228.                 INTEGER002 = 16
  1229.                 If (((INTEGER008 == 0) && (GrafMode() <> "A")) && (GrafMode() <> "N")) Then
  1230.                     Color BYTE018
  1231.                     STRING020 = ReadLine(STRING018, 7)
  1232.                     AnsiPos BYTE062 - 2 + Len(StripAtx(STRING020)), BYTE063 + 2
  1233.                     Print Replace(Space(Len(StripAtx(STRING020))), Chr(32), Chr(BYTE009))
  1234.                 Endif
  1235.                 Color 7
  1236.                 Continue
  1237.             Endif
  1238.             If (BYTE065 == 3) Then
  1239.                 Inc INTEGER008
  1240.                 BOOLEAN014 = 0
  1241.                 INTEGER002 = 0
  1242.                 Color 7
  1243.                 Continue
  1244.             Endif
  1245.             If (BYTE065 == 4) Then
  1246.                 WORD008 = 0
  1247.                 Break
  1248.                 Continue
  1249.             Endif
  1250.             If (BYTE065 == 5) Then
  1251.                 INTEGER008 = 0
  1252.                 BOOLEAN014 = 0
  1253.                 INTEGER002 = 0
  1254.                 If ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  1255.                     Color BYTE018
  1256.                     STRING020 = ReadLine(STRING018, 7)
  1257.                     AnsiPos BYTE062 - 2 + Len(StripAtx(STRING020)), BYTE063 + 2
  1258.                     Print Replace(Space(Len(StripAtx(STRING020))), Chr(32), Chr(BYTE009))
  1259.                 Endif
  1260.                 Color 7
  1261.                 Continue
  1262.             Endif
  1263.             If (BYTE065 == 6) Then
  1264.                 INTEGER008 = INTEGER009 - 1
  1265.                 BOOLEAN014 = 0
  1266.                 INTEGER002 = 0
  1267.                 Color 7
  1268.                 Continue
  1269.             Endif
  1270.             If (((BYTE065 == 7) || (BYTE065 == 8)) || (BYTE065 == 9)) Then
  1271.                 FClose 1
  1272.                 If (BYTE065 == 7) Then
  1273.                     STRING020 = STRING012
  1274.                     Goto LABEL019
  1275.                 Endif
  1276.                 If (BYTE065 == 8) Then
  1277.                     STRING020 = STRING026
  1278.                     Goto LABEL019
  1279.                 Endif
  1280.                 If (BYTE065 == 9) Then
  1281.                     STRING020 = STRING027
  1282.                 Endif
  1283.                 :LABEL019
  1284.                 If (BOOLEAN001) Log "Viewed (" + STRING020 + ") File", 0
  1285.                 Color 7
  1286.                 Cls
  1287.                 StartDisp 2
  1288.                 Print "@QON@"
  1289.                 DispFile STRING009 + STRING020, 1 + 4 + 2
  1290.                 Newline
  1291.                 Wait
  1292.                 StartDisp 1
  1293.                 Print "@QOFF@"
  1294.                 Color 7
  1295.                 Cls
  1296.                 BOOLEAN015 = 1
  1297.                 Goto LABEL014
  1298.             Endif
  1299.         EndWhile
  1300.         FClose 1
  1301.         If (WORD008 <> 0) Then
  1302.             PROC013(WORD008 + INTEGER008 * 17 - 1, STRING039)
  1303.             BOOLEAN015 = 1
  1304.             Goto LABEL014
  1305.         Endif
  1306.     Endif
  1307.  
  1308.     EndProc
  1309.  
  1310.  
  1311. ;------------------------------------------------------------------------------
  1312.  
  1313.     Procedure PROC005(String STRING044, Byte BYTE068)
  1314.  
  1315.     String   STRING045
  1316.     String   STRING046
  1317.     String   STRING047
  1318.     String   STRING048
  1319.     String   STRING049
  1320.     String   STRING050
  1321.     String   STRING051
  1322.     String   STRING052
  1323.     Byte     BYTE069
  1324.     Byte     BYTE070
  1325.     Byte     BYTE071
  1326.     Byte     BYTE072
  1327.     Byte     BYTE073
  1328.     Byte     BYTE074
  1329.     Byte     BYTE075
  1330.     Byte     BYTE076
  1331.     Byte     BYTE077
  1332.     Byte     BYTE078
  1333.     Word     WORD011
  1334.  
  1335.     If (Exist(PPEPath() + "DMS" + String(PcbNode()) + ".OS2")) Delete PPEPath() + "DMS" + String(PcbNode()) + ".OS2"
  1336.     Color 7
  1337.     If ((GrafMode() <> "R") && (GrafMode() <> "G")) Then
  1338.         Newline
  1339.     Else
  1340.         For WORD001 = GetY() To 23
  1341.             If (Len(RTrim(ScrText(1, WORD001, 80, 0), Chr(32))) == 0) Break
  1342.         Next
  1343.         AnsiPos 1, WORD001 + 1
  1344.     Endif
  1345.     FOpen 1, STRING007 + STRING044 + ".CAT", 2, 0
  1346.     FSeek 1, 1 + BYTE068 * 260, 0
  1347.     PROC011(1, STRING045, 50, "Untitled")
  1348.     PROC011(1, STRING046, 8, "")
  1349.     FRead 1, BYTE075, 1
  1350.     FRead 1, BYTE077, 1
  1351.     FRead 1, STRING020, 2
  1352.     BYTE069 = Asc(Right(STRING020, 1))
  1353.     FRead 1, STRING020, 2
  1354.     BYTE070 = Asc(Right(STRING020, 1))
  1355.     PROC011(1, STRING047, 32, "")
  1356.     PROC011(1, STRING048, 44, "")
  1357.     FRead 1, STRING020, 2
  1358.     BYTE071 = Asc(Right(STRING020, 1))
  1359.     FRead 1, STRING020, 2
  1360.     BYTE072 = Asc(Right(STRING020, 1))
  1361.     FRead 1, STRING020, 2
  1362.     BYTE073 = Asc(Right(STRING020, 1))
  1363.     PROC011(1, STRING049, 7, "0")
  1364.     PROC011(1, STRING050, 7, "0")
  1365.     FRead 1, STRING020, 2
  1366.     BYTE074 = Asc(Right(STRING020, 1))
  1367.     PROC011(1, STRING051, 76, "")
  1368.     PROC011(1, STRING052, 12, "")
  1369.     FRead 1, STRING020, 2
  1370.     BYTE078 = Asc(Right(STRING020, 1))
  1371.     FClose 1
  1372.     If (Len(STRING052) <> 0) Then
  1373.         STRING020 = ""
  1374.         InputStr ReadLine(STRING018, 29), STRING020, 7, 12, Mask_Ascii(), 64 + 4 + 2 + 8 + 1
  1375.         Newline
  1376.         If (STRING020 <> STRING052) Then
  1377.             If (BOOLEAN001) Log "Password Attempt (" + STRING046 + "): " + STRING020, 0
  1378.         Else
  1379.             If ((Left(STRING048, 1) <> Chr(33)) && !Exist(STRING048)) STRING048 = STRING009 + STRING048
  1380.             If (Exist(LTrim(STRING048, Chr(33)))) Then
  1381.                 If (Left(STRING048, 1) == Chr(33)) Then
  1382.                     DispStr STRING048
  1383.                     Goto LABEL020
  1384.                 Endif
  1385.                 Color 7
  1386.                 Print "@QON@"
  1387.                 DispFile STRING048, 1 + 4 + 2
  1388.                 Newline
  1389.                 Print "@QOFF@"
  1390.             Endif
  1391.             :LABEL020
  1392.             If (BYTE072 == 89) Then
  1393.                 Eval FUNCTION003(1, STRING046)
  1394.                 PrintLn ReplaceStr(ReplaceStr(ReplaceStr(ReplaceStr(ReadLine(STRING018, 21), "@OPENED@", INTEGER006), "@LUSER@", STRING011), "00-00-00", DATE002), "00:00:00", TIME001)
  1395.                 Newline
  1396.             Endif
  1397.             Color 7
  1398.             WORD011 = MinLeft()
  1399.             If (BOOLEAN002) Then
  1400.                 RdUNet PcbNode()
  1401.                 If (BOOLEAN011) Then
  1402.                     STRING020 = U_Name() + " - " + STRING046
  1403.                     Goto LABEL021
  1404.                 Endif
  1405.                 STRING020 = U_Name() + " [" + RTrim(Left(STRING045, 48 - 3 + Len(U_Name())), Chr(32)) + "]"
  1406.                 :LABEL021
  1407.                 WrUNet PcbNode(), "D", UN_Name(), "Door Menu System", STRING020, ""
  1408.             Endif
  1409.             Select Case (BYTE069)
  1410.                 Case 68
  1411.                     If (Exist(STRING023 + STRING046)) Goto LABEL022
  1412.                     PROC009("(Error) Non-Existent """ + STRING045 + """ (" + STRING046 + ") Batch")
  1413.                     Goto LABEL031
  1414.                     Goto LABEL027
  1415.                     :LABEL022
  1416.                     If ((Psa(7) && ((PCBAccStat(0) == "1") || (PCBAccStat(0) == "2"))) && (STRING049 <> "0")) RecordUsage 12, "Debit for Door/Game", STRING046, STRING049, 1
  1417.                     If (BYTE071 == 89) Then
  1418.                         Backup 36
  1419.                         Print Chr(32) + Left(ReadLine(STRING018, 22), 35)
  1420.                         PROC012(1, STRING046)
  1421.                     Endif
  1422.                     Backup 36
  1423.                     Print Chr(32) + Left(ReadLine(STRING018, 23), 35)
  1424.                     FOpen 2, PPEPath() + "DMS" + String(PcbNode()) + ".TXT", 1, 3
  1425.                     FPutLn 2, "CLS"
  1426.                     FPutLn 2, "ECHO."
  1427.                     FPutLn 2, "ECHO Door/Game   : " + STRING045 + " (" + STRING046 + ")"
  1428.                     FPutLn 2, "ECHO User        : " + Mixed(U_Name())
  1429.                     STRING020 = "ECHO Environment : "
  1430.                     If (BYTE074 == 68) Then
  1431.                         STRING020 = STRING020 + "DOS (DMS" + String(PcbNode()) + ".BAT)"
  1432.                     Else
  1433.                         STRING020 = STRING020 + "OS/2 (DMS" + String(PcbNode()) + ".CMD)"
  1434.                     Endif
  1435.                     FPutLn 2, STRING020
  1436.                     STRING020 = "ECHO Created     : " + STRING047
  1437.                     Select Case (BYTE070)
  1438.                         Case 68
  1439.                             STRING020 = STRING020 + "DOOR.SYS"
  1440.                         Case 85
  1441.                             STRING020 = STRING020 + "USER.SYS"
  1442.                         Case 80
  1443.                             STRING020 = STRING020 + "PCBOARD.SYS"
  1444.                         Case 66
  1445.                             STRING020 = STRING020 + "USER/DOOR"
  1446.                     End Select
  1447.                     FPutLn 2, STRING020
  1448.                     FPutLn 2, "ECHO."
  1449.                     FClose 2
  1450.                     Select Case (BYTE074)
  1451.                         Case 68
  1452.                             FOpen 2, PPEPath() + "DMS" + String(PcbNode()) + ".BAT", 1, 3
  1453.                             FPutLn 2, "@ECHO OFF"
  1454.                             If (Len(STRING028) <> 0) FPutLn 2, "SET PCBDOOR=" + STRING028
  1455.                             If (BOOLEAN007) Then
  1456.                                 If (Exist("STARTOS2.CMD")) Then
  1457.                                     FOpen 1, "STARTOS2.CMD", 0, 0
  1458.                                     :LABEL023
  1459.                                     If (Ferr(1)) Goto LABEL024
  1460.                                     FGet 1, STRING020
  1461.                                     If (Upper(Left(LTrim(STRING020, Chr(32)), 4)) == "SET ") FPutLn 2, Upper(LTrim(STRING020, Chr(32)))
  1462.                                     Goto LABEL023
  1463.                                     :LABEL024
  1464.                                     FClose 1
  1465.                                 Endif
  1466.                                 If (Exist("BOARD.CMD")) Then
  1467.                                     FOpen 1, "BOARD.CMD", 0, 0
  1468.                                     :LABEL025
  1469.                                     If (Ferr(1)) Goto LABEL026
  1470.                                     FGet 1, STRING020
  1471.                                     If (Upper(Left(LTrim(STRING020, Chr(32)), 4)) == "SET ") FPutLn 2, Upper(LTrim(STRING020, Chr(32)))
  1472.                                     Goto LABEL025
  1473.                                     :LABEL026
  1474.                                     FClose 1
  1475.                                 Endif
  1476.                             Endif
  1477.                             FClose 2
  1478.                             Append PPEPath() + "DMS" + String(PcbNode()) + ".TXT", PPEPath() + "DMS" + String(PcbNode()) + ".BAT"
  1479.                             Append STRING023 + STRING046, PPEPath() + "DMS" + String(PcbNode()) + ".BAT"
  1480.                             If (Exist(STRING023 + STRING046 + ".OS2")) Then
  1481.                                 Copy STRING023 + STRING046 + ".OS2", PPEPath() + "DMS" + String(PcbNode()) + ".OS2"
  1482.                             ElseIf (Exist(STRING023 + "PCBDOS.OS2")) Then
  1483.                                 Copy STRING023 + "PCBDOS.OS2", PPEPath() + "DMS" + String(PcbNode()) + ".OS2"
  1484.                             Endif
  1485.                         Case 79
  1486.                             FOpen 2, PPEPath() + "DMS" + String(PcbNode()) + ".CMD", 1, 3
  1487.                             FPutLn 2, "@ECHO OFF"
  1488.                             If (Len(STRING028) <> 0) FPutLn 2, "SET PCBDOOR=" + STRING028
  1489.                             FClose 2
  1490.                             Append PPEPath() + "DMS" + String(PcbNode()) + ".TXT", PPEPath() + "DMS" + String(PcbNode()) + ".CMD"
  1491.                             Append STRING023 + STRING046, PPEPath() + "DMS" + String(PcbNode()) + ".CMD"
  1492.                     End Select
  1493.                     :LABEL027
  1494.                     Delete PPEPath() + "DMS" + String(PcbNode()) + ".TXT"
  1495.                     Backup 36
  1496.                     Print Chr(32) + Left(ReadLine(STRING018, 24), 35)
  1497.                     Select Case (BYTE070)
  1498.                         Case 68
  1499.                             PROC006(STRING047)
  1500.                         Case 85
  1501.                             WrUSysDoor STRING046
  1502.                         Case 80
  1503.                             Copy "PCBOARD.SYS", STRING047 + "PCBOARD.SYS"
  1504.                         Case 66
  1505.                             PROC006(STRING047)
  1506.                             WrUSysDoor STRING046
  1507.                     End Select
  1508.                     Backup 36
  1509.                     PrintLn Left(ReplaceStr(ReplaceStr(ReadLine(STRING018, 19), "@NAME@", STRING045), "@FILE@", STRING046), 78)
  1510.                     FClose -1
  1511.                     If (BOOLEAN001) Log "Opened Door (" + STRING046 + ") at " + String(Time()) , 0
  1512.                     Select Case (BYTE074)
  1513.                         Case 68
  1514.                             Shell 1, BYTE076, PPEPath() + "DMS" + String(PcbNode()) + ".BAT", ""
  1515.                             Delete PPEPath() + "DMS" + String(PcbNode()) + ".BAT"
  1516.                             Delete PPEPath() + "DMS" + String(PcbNode()) + ".OS2"
  1517.                         Case 79
  1518.                             Shell 1, BYTE076, PPEPath() + "DMS" + String(PcbNode()) + ".CMD", ""
  1519.                             Delete PPEPath() + "DMS" + String(PcbNode()) + ".CMD"
  1520.                     End Select
  1521.                     If (BOOLEAN001) Log "Back from DOS at " + String(Time()) , 0
  1522.                     PrintLn ReplaceStr(ReadLine(STRING018, 25), "@BBS@", STRING004)
  1523.                     If ((Psa(7) && ((PCBAccStat(0) == "1") || (PCBAccStat(0) == "2"))) && (STRING050 <> "0")) RecordUsage 12, "Debit for Door/Game", STRING046, STRING050, WORD011 - MinLeft()
  1524.                     If ((BYTE070 == 85) || (BYTE070 == 66)) RdUSys
  1525.                     If (BYTE070 <> 80) Then
  1526.                         FOpen 1, "PCBOARD.SYS", 0, 0
  1527.                     Else
  1528.                         FOpen 1, STRING047 + "PCBOARD.SYS", 0, 0
  1529.                     Endif
  1530.                     FSeek 1, 9, 0
  1531.                     FRead 1, STRING020, 118
  1532.                     FClose 1
  1533.                     If (STRING020 == Space(118)) Then
  1534.                         If (BYTE073 == 89) AdjTime WORD011 - MinLeft()
  1535.                         If ((Psa(7) && ((PCBAccStat(0) == "1") || (PCBAccStat(0) == "2"))) && (STRING050 <> "0")) RecordUsage 12, "Debit for Door/Game", STRING046, STRING050, WORD011 - MinLeft()
  1536.                         Hangup
  1537.                     Endif
  1538.                     If (BOOLEAN005) Then
  1539.                         If ((BYTE070 == 68) || (BYTE070 == 66)) Then
  1540.                             Delete STRING047 + "DOOR.SYS"
  1541.                             Goto LABEL028
  1542.                         Endif
  1543.                         If (BYTE070 == 80) Then
  1544.                             If (Len(STRING047) <> 0) Delete STRING047 + "PCBOARD.SYS"
  1545.                         Endif
  1546.                     Endif
  1547.                     :LABEL028
  1548.                 Case 80
  1549.                     STRING051 = LTrim(STRING051, "!")
  1550.                     Tokenize STRING051
  1551.                     GetToken STRING020
  1552.                     If (Exist(STRING020)) Goto LABEL029
  1553.                     PROC009("(Error) Non-Existent """ + STRING045 + """ (" + STRING046 + ") PPE")
  1554.                     Goto LABEL031
  1555.                     Goto LABEL030
  1556.                     :LABEL029
  1557.                     If ((Psa(7) && ((PCBAccStat(0) == "1") || (PCBAccStat(0) == "2"))) && (STRING049 <> "0")) RecordUsage 12, "Debit for Door/Game", STRING046, STRING049, 1
  1558.                     If (BYTE071 == 89) Then
  1559.                         Backup 36
  1560.                         Print Chr(32) + Left(ReadLine(STRING018, 22), 35)
  1561.                         PROC012(1, STRING046)
  1562.                     Endif
  1563.                     FClose -1
  1564.                     If (BOOLEAN001) Log "Opened PPE (" + STRING046 + ") at " + String(Time()) , 0
  1565.                     DispStr "!" + STRING051
  1566.                     PrintLn ReplaceStr(ReadLine(STRING018, 25), "@BBS@", STRING004)
  1567.                     If ((Psa(7) && ((PCBAccStat(0) == "1") || (PCBAccStat(0) == "2"))) && (STRING050 <> "0")) RecordUsage 12, "Debit for Door/Game", STRING046, STRING050, WORD011 - MinLeft()
  1568.             End Select
  1569.             :LABEL030
  1570.             If (BYTE073 == 89) AdjTime WORD011 - MinLeft()
  1571.             KeyFlush
  1572.             If (Exist("PCBDOOR.TXT")) Then
  1573.                 DispFile "PCBDOOR.TXT", 1 + 4 + 2
  1574.                 Newline
  1575.                 Wait
  1576.                 Delete "PCBDOOR.TXT"
  1577.             Endif
  1578.             If (Exist("PCBSTUFF.KBD")) Then
  1579.                 KbdFile "PCBSTUFF.KBD"
  1580.                 Delete "PCBSTUFF.KBD"
  1581.                 PROC001(0)
  1582.             Endif
  1583.             If (BYTE078 == 78) PROC001(0)
  1584.         Endif
  1585.     Endif
  1586.     :LABEL031
  1587.     RdUNet PcbNode()
  1588.     If (ChatStat()) Then
  1589.         WrUNet PcbNode(), "A", UN_Name(), "Door Menu System", "", ""
  1590.     Else
  1591.         WrUNet PcbNode(), "U", UN_Name(), "Door Menu System", "", ""
  1592.     Endif
  1593.     Color 7
  1594.     Cls
  1595.  
  1596.     EndProc
  1597.  
  1598.  
  1599. ;------------------------------------------------------------------------------
  1600.  
  1601.     Procedure PROC006(String STRING053)
  1602.  
  1603.     Word     WORD012
  1604.     String   STRING054
  1605.  
  1606.     FOpen 2, ReadLine(PCBDat(), 29), 0, 0
  1607.     FRead 2, STRING054, 25
  1608.     FClose 2
  1609.     STRING054 = RTrim(STRING054, Chr(32))
  1610.     If (Exist(STRING053 + "DOOR.SYS")) Delete STRING053 + "DOOR.SYS"
  1611.     FOpen 1, STRING053 + "DOOR.SYS", 2, 0
  1612.     If (OnLocal()) Then
  1613.         FPutLn 1, "COM0:"
  1614.     Else
  1615.         STRING020 = RTrim(ReplaceStr(ReadLine(PCBDat(), 52), "PORT", "COM"), Chr(58))
  1616.         FPutLn 1, STRING020 + Chr(58)
  1617.     Endif
  1618.     GetUser
  1619.     FPutLn 1, Carrier()
  1620.     FPutLn 1, "8"
  1621.     FPutLn 1, PcbNode()
  1622.     FPutLn 1, ReadLine(PCBDat(), 53)
  1623.     FPutLn 1, "Y"
  1624.     FPutLn 1, "N"
  1625.     FPutLn 1, "N"
  1626.     FPutLn 1, "N"
  1627.     If (STRING054 == U_Name()) Then
  1628.         If (ReadLine(PCBDat(), 4)) Then
  1629.             STRING020 = STRING054
  1630.         Else
  1631.             STRING020 = ReadLine(PCBDat(), 2)
  1632.         Endif
  1633.     Else
  1634.         STRING020 = U_Name()
  1635.     Endif
  1636.     FPutLn 1, STRING020
  1637.     FPutLn 1, U_City
  1638.     FPutLn 1, U_HVPhone
  1639.     FPutLn 1, U_BDPhone
  1640.     FPutLn 1, U_Pwd
  1641.     FPutLn 1, U_Sec
  1642.     FPutLn 1, U_Logons()
  1643.     FPutLn 1, U_LDate()
  1644.     FPutLn 1, MinLeft() * 60
  1645.     FPutLn 1, MinLeft()
  1646.     If ((GrafMode() == "G") || (GrafMode() == "R")) Then
  1647.         FPutLn 1, "GR"
  1648.     Else
  1649.         FPutLn 1, "NG"
  1650.     Endif
  1651.     FPutLn 1, U_PageLen
  1652.     If (U_Expert) Then
  1653.         FPutLn 1, "Y"
  1654.     Else
  1655.         FPutLn 1, "N"
  1656.     Endif
  1657.     FPut 1, "0"
  1658.     For WORD012 = 1 To HiConfNum()
  1659.         If (ConfReg(WORD012)) FPut 1, Chr(44) + String(WORD012)
  1660.     Next
  1661.     FPutLn 1, ""
  1662.     FPutLn 1, CurConf()
  1663.     FPutLn 1, U_ExpDate
  1664.     FPutLn 1, U_RecNum(U_Name())
  1665.     FPutLn 1, U_Trans
  1666.     FPutLn 1, U_Ful()
  1667.     FPutLn 1, U_Fdl()
  1668.     FPutLn 1, U_BdlDay()
  1669.     FPutLn 1, "0"
  1670.     FPutLn 1, "0"
  1671.     FPutLn 1, RTrim(ReadLine(PCBDat(), 28), Chr(92))
  1672.     FPutLn 1, StripStr(ReadLine(PCBDat(), 36), "\WELCOME")
  1673.     If (ReadLine(PCBDat(), 4)) Then
  1674.         Tokenize STRING054
  1675.     Else
  1676.         Tokenize ReadLine(PCBDat(), 2)
  1677.     Endif
  1678.     STRING020 = Mixed(GetToken())
  1679.     FPutLn 1, STRING020
  1680.     FPutLn 1, U_Alias
  1681.     FPutLn 1, PCBMac("@EVENT@")
  1682.     If (ErrCorrect()) Then
  1683.         FPutLn 1, "Y"
  1684.     Else
  1685.         FPutLn 1, "N"
  1686.     Endif
  1687.     If (GrafMode() == "A") Then
  1688.         FPutLn 1, "Y"
  1689.     Else
  1690.         FPutLn 1, "N"
  1691.     Endif
  1692.     FPutLn 1, "N"
  1693.     FPutLn 1, ReadLine(PCBDat(), 110)
  1694.     FPutLn 1, "0"
  1695.     FPutLn 1, U_LDir()
  1696.     FPutLn 1, Time()
  1697.     FPutLn 1, U_LTime()
  1698.     FPutLn 1, "0"
  1699.     FPutLn 1, "0"
  1700.     FPutLn 1, U_Bul()
  1701.     FPutLn 1, U_Bdl()
  1702.     FPutLn 1, U_Cmnt1
  1703.     FPutLn 1, "0"
  1704.     FPutLn 1, U_MsgWr()
  1705.     FClose 1
  1706.  
  1707.     EndProc
  1708.  
  1709.  
  1710. ;------------------------------------------------------------------------------
  1711.  
  1712.     Procedure PROC012(Integer INTEGER010, String STRING055)
  1713.  
  1714.     Integer  INTEGER011
  1715.     BigStr   BIGSTR001
  1716.  
  1717.     If (Exist(STRING007 + "DMSTAT.DAT")) Goto LABEL032
  1718.     FOpen INTEGER010, STRING007 + "DMSTAT.DAT", 2, 0
  1719.     FWrite INTEGER010, Chr(1), 1
  1720.     FWrite INTEGER010, Date(), 2
  1721.     FClose INTEGER010
  1722.     :LABEL032
  1723.     GetUser
  1724.     If (FUNCTION003(INTEGER010, STRING055)) Then
  1725.         Inc INTEGER006
  1726.         DATE002 = Date()
  1727.         TIME001 = Time()
  1728.         If ((BOOLEAN008 && Psa(1)) && (Len(RTrim(U_Alias, Chr(32))) <> 0)) Then
  1729.             STRING011 = U_Alias
  1730.         Else
  1731.             STRING011 = U_Name()
  1732.         Endif
  1733.         FOpen INTEGER010, STRING007 + "DMSTAT.DAT", 2, 0
  1734.         FSeek INTEGER010, INTEGER005 * 45 + 12, 0
  1735.         FWrite INTEGER010, INTEGER006, 4
  1736.         FWrite INTEGER010, DATE002, 2
  1737.         FWrite INTEGER010, TIME001, 4
  1738.         FWrite INTEGER010, Chr(Len(STRING011)) + Left(STRING011, 25), 26
  1739.         FClose INTEGER010
  1740.     Else
  1741.         INTEGER011 = (FileInf(STRING007 + "DMSTAT.DAT", 4) - 3) / 45
  1742.         FOpen INTEGER010, STRING007 + "DMSTAT.DAT", 2, 0
  1743.         While (INTEGER011 <> INTEGER003) Do
  1744.             FSeek INTEGER010, (INTEGER011 - 1) * 45 + 3, 0
  1745.             FRead INTEGER010, BIGSTR001, 45
  1746.             FWrite INTEGER010, BIGSTR001, 45
  1747.             Dec INTEGER011
  1748.         EndWhile
  1749.         If ((BOOLEAN008 && Psa(1)) && (Len(RTrim(U_Alias, Chr(32))) <> 0)) Then
  1750.             STRING011 = U_Alias
  1751.         Else
  1752.             STRING011 = U_Name()
  1753.         Endif
  1754.         FSeek INTEGER010, INTEGER011 * 45 + 3, 0
  1755.         FWrite INTEGER010, Chr(Len(STRING055)) + Left(STRING055, 8), 9
  1756.         FWrite INTEGER010, 1, 4
  1757.         FWrite INTEGER010, Date(), 2
  1758.         FWrite INTEGER010, Time(), 4
  1759.         FWrite INTEGER010, Chr(Len(STRING011)) + Left(STRING011, 25), 26
  1760.         FClose INTEGER010
  1761.     Endif
  1762.  
  1763.     EndProc
  1764.  
  1765.  
  1766. ;------------------------------------------------------------------------------
  1767.  
  1768.     Function FUNCTION003(Integer INTEGER012, String STRING056) Boolean
  1769.  
  1770.     String   STRING057
  1771.     Byte     BYTE079
  1772.  
  1773.     If (Exist(STRING007 + "DMSTAT.DAT")) Then
  1774.         INTEGER003 = 0
  1775.         INTEGER004 = (FileInf(STRING007 + "DMSTAT.DAT", 4) - 3) / 45 - 1
  1776.         FUNCTION003 = 0
  1777.         FOpen INTEGER012, STRING007 + "DMSTAT.DAT", 2, 0
  1778.         While ((INTEGER003 <= INTEGER004) && !FUNCTION003) Do
  1779.             INTEGER005 = (INTEGER003 + INTEGER004) / 2
  1780.             FSeek INTEGER012, INTEGER005 * 45 + 3, 0
  1781.             PROC011(INTEGER012, STRING057, 8, "")
  1782.             If (RTrim(STRING057, Chr(32)) == STRING056) Then
  1783.                 FUNCTION003 = 1
  1784.                 STRING010 = STRING057
  1785.                 FRead INTEGER012, INTEGER006, 4
  1786.                 FRead INTEGER012, DATE002, 2
  1787.                 FRead INTEGER012, TIME001, 4
  1788.                 PROC011(INTEGER012, STRING011, 25, "")
  1789.                 Continue
  1790.             Endif
  1791.             If (RTrim(STRING057, Chr(32)) < STRING056) Then
  1792.                 INTEGER003 = INTEGER005 + 1
  1793.                 Continue
  1794.             Endif
  1795.             INTEGER004 = INTEGER005 - 1
  1796.         EndWhile
  1797.         FClose INTEGER012
  1798.     Endif
  1799.     If (FUNCTION003) Goto LABEL033
  1800.     INTEGER006 = 0
  1801.     DATE002 = 0
  1802.     TIME001 = 0
  1803.     STRING011 = "NO ONE"
  1804.     :LABEL033
  1805.  
  1806.     EndFunc
  1807.  
  1808.  
  1809. ;------------------------------------------------------------------------------
  1810.  
  1811.     Procedure PROC014()
  1812.  
  1813.     STRING013 = ReadLine(PCBDat(), 41)
  1814.     FOpen 1, STRING013, 0, 0
  1815.     FRead 1, WORD002, 2
  1816.     FRead 1, WORD003, 2
  1817.     FRead 1, WORD004, 2
  1818.     FClose 1
  1819.     WORD005 = WORD003 / 8
  1820.     If (WORD005 % 8 <> 0) Inc WORD005
  1821.     WORD005 = WORD005 * 2
  1822.  
  1823.     EndProc
  1824.  
  1825.  
  1826. ;------------------------------------------------------------------------------
  1827.  
  1828.     Function FUNCTION005(Byte BYTE079) Boolean
  1829.  
  1830.     Byte     BYTE080
  1831.     Byte     BYTE081
  1832.  
  1833.     FSeek BYTE079, WORD004 * (PcbNode() - 1) + WORD005 + 6, 0
  1834.     FRead BYTE079, BYTE080, 1
  1835.     FUNCTION005 = (BYTE080 == 77)
  1836.  
  1837.     EndFunc
  1838.  
  1839.  
  1840. ;------------------------------------------------------------------------------
  1841.  
  1842.     Procedure PROC015(Byte BYTE081, Var String STRING058)
  1843.  
  1844.     Byte     BYTE082
  1845.  
  1846.     FSeek BYTE081, WORD004 * (PcbNode() - 1) + WORD005 + 110, 0
  1847.     FRead BYTE081, STRING058, 80
  1848.     If (ChatStat()) Then
  1849.         BYTE082 = 65
  1850.     Else
  1851.         BYTE082 = 85
  1852.     Endif
  1853.     RdUNet PcbNode()
  1854.     WrUNet PcbNode(), Chr(BYTE082), UN_Name(), UN_City(), UN_Oper(), ""
  1855.  
  1856.     EndProc
  1857.  
  1858.  
  1859. ;------------------------------------------------------------------------------
  1860.  
  1861.     Function FUNCTION006(Byte BYTE083) Boolean
  1862.  
  1863.     Word     WORD013
  1864.     Byte     BYTE084
  1865.  
  1866.     FSeek BYTE083, WORD004 * (PcbNode() - 1) + WORD005 + 8, 0
  1867.     FRead BYTE083, WORD013, 2
  1868.     FUNCTION006 = (WORD013 <> 0)
  1869.  
  1870.     EndFunc
  1871.  
  1872.  
  1873. ;------------------------------------------------------------------------------
  1874.  
  1875.     Procedure PROC016(Byte BYTE084, Var String STRING059)
  1876.  
  1877.     Word     WORD014
  1878.     Byte     BYTE085
  1879.  
  1880.     FSeek BYTE084, WORD004 * (PcbNode() - 1) + WORD005 + 8, 0
  1881.     FRead BYTE084, WORD014, 2
  1882.     FSeek BYTE084, -2, 1
  1883.     FWrite BYTE084, 0, 2
  1884.     FSeek BYTE084, 180, 1
  1885.     FRead BYTE084, BYTE085, 1
  1886.     FSeek BYTE084, -1, 1
  1887.     FWrite BYTE084, 0, 1
  1888.     RdUNet WORD014
  1889.     STRING059 = "Chat Request: " + UN_Name() + " (" + String(WORD014) + ") in Channel " + String(BYTE085)
  1890.  
  1891.     EndProc
  1892.  
  1893.  
  1894. ;------------------------------------------------------------------------------
  1895.  
  1896.     Procedure PROC001(Boolean BOOLEAN019)
  1897.  
  1898.     If (BOOLEAN002) Then
  1899.         RdUNet PcbNode()
  1900.         If (ChatStat()) Then
  1901.             WrUNet PcbNode(), "A", UN_Name(), UN_City(), "", ""
  1902.             Goto LABEL034
  1903.         Endif
  1904.         WrUNet PcbNode(), "U", UN_Name(), UN_City(), "", ""
  1905.     Endif
  1906.     :LABEL034
  1907.     If (BOOLEAN019) Goto LABEL036
  1908.     If (BOOLEAN001) Log "-- Door Menu System (Closed) at (" + String(Time()) + ") --", 1
  1909.     If (BOOLEAN004) Then
  1910.         Color 7
  1911.         Cls
  1912.     ElseIf ((GrafMode() <> "A") && (GrafMode() <> "N")) Then
  1913.         Color 7
  1914.         AnsiPos 1, 23
  1915.     Endif
  1916.     If (Exist(STRING009 + STRING025)) Goto LABEL035
  1917.     FCreate 1, STRING009 + STRING025, 2, 0
  1918.     FClose 1
  1919.     :LABEL035
  1920.     DispFile STRING009 + STRING025, 1 + 4 + 2
  1921.     :LABEL036
  1922.     Print "@QON@"
  1923.     StartDisp 2
  1924.     End
  1925.  
  1926.     EndProc
  1927.  
  1928.  
  1929. ;------------------------------------------------------------------------------
  1930.  
  1931.     Procedure PROC002()
  1932.  
  1933.     Cls
  1934.     Color 31
  1935.     ClrEol
  1936.     STRING021 = "Door Menu System " + STRING002 + " <Enhanced PCBoard Door Area>"
  1937.     PrintLn Space(40 - Len(STRING021) / 2) + STRING021
  1938.     Color 23
  1939.     ClrEol
  1940.     STRING021 = "Copyright (C) 1996 ArcticSoft Development, (Mario Mueller)"
  1941.     PrintLn Space(40 - Len(STRING021) / 2) + STRING021
  1942.     Color 7
  1943.     STRING021 = STRING003
  1944.     PrintLn Space(40 - Len(STRING021) / 2) + STRING021
  1945.     Newline
  1946.     If (FUNCTION001(STRING004, STRING005, STRING006)) Then
  1947.         STRING016 = STRING004
  1948.     Else
  1949.         STRING016 = "Unregistered Evaluation Copy"
  1950.     Endif
  1951.     PrintLn "@X07[Registration: @X0F" + STRING016 + "@X07]"
  1952.  
  1953.     EndProc
  1954.  
  1955.  
  1956. ;------------------------------------------------------------------------------
  1957.  
  1958.     Function FUNCTION001(String STRING060, String STRING061, String STRING062) Boolean
  1959.  
  1960.     String   STRING063
  1961.     String   STRING064
  1962.     String   STRING065
  1963.     String   STRING066
  1964.     String   STRING067
  1965.     String   STRING068
  1966.     String   STRING069
  1967.  
  1968.     STRING060 = Upper(STRING060)
  1969.     STRING061 = Upper(STRING061)
  1970.     FUNCTION001 = 0
  1971.     STRING063 = MegaNum(Len(STRING060) + Asc(Left(Upper(STRING060), 1)))
  1972.     STRING064 = MegaNum(Len(STRING060) - Len(Strip(Strip(Strip(Strip(Strip(Strip(Upper(STRING060), Chr(66)), Chr(70)), Chr(74)), Chr(80)), Chr(86)), Chr(90))) + (Left(Len(STRING060), 1) + 1) * 40)
  1973.     STRING065 = MegaNum(Len(STRING060) - Len(Strip(STRING060, Chr(32))) + Asc(Right(Upper(STRING060), 1)) + 300)
  1974.     STRING066 = I2S(Len(STRING061) + Asc(Left(Upper(STRING061), 1)), 18)
  1975.     STRING067 = MegaNum(Len(STRING061) - Len(Strip(Strip(Strip(Strip(Strip(Strip(Upper(STRING061), Chr(65)), Chr(69)), Chr(73)), Chr(79)), Chr(85)), Chr(89))) + (Left(Len(STRING061), 1) + 1) * 40)
  1976.     STRING068 = MegaNum(Len(STRING061) - Len(Strip(STRING061, Chr(32))) + Asc(Right(Upper(STRING061), 1)) + 300)
  1977.     If (Replace(STRING064 + STRING063 + STRING065 + STRING067 + STRING068 + STRING066, "0", "O") == STRING062) FUNCTION001 = 1
  1978.  
  1979.     EndFunc
  1980.  
  1981.  
  1982. ;------------------------------------------------------------------------------
  1983.  
  1984.     Procedure PROC009(String STRING069)
  1985.  
  1986.     Byte     BYTE086
  1987.  
  1988.     BYTE086 = Len(StripAtx(STRING069))
  1989.     If (BYTE086 < Len(StripAtx(ReadLine(STRING018, 11)))) BYTE086 = Len(StripAtx(ReadLine(STRING018, 11)))
  1990.     If (BYTE086 < Len(StripAtx(ReadLine(STRING018, 12)))) BYTE086 = Len(StripAtx(ReadLine(STRING018, 12)))
  1991.     If (BOOLEAN001) Log STRING069, 0
  1992.     If (BYTE086 > 74) Then
  1993.         STRING069 = Left(STRING069, 74)
  1994.         BYTE086 = 74
  1995.     Endif
  1996.     If (BYTE086 % 2 <> 0) Then
  1997.         STRING069 = STRING069 + Chr(32)
  1998.         Inc BYTE086
  1999.     Endif
  2000.     PROC008(40 - 1 + BYTE086 / 2, 10, 40 + BYTE086 / 2, 16)
  2001.     STRING020 = ReadLine(STRING018, 11)
  2002.     AnsiPos 40 - Len(StripAtx(STRING020)) / 2, 11
  2003.     Print STRING020
  2004.     AnsiPos 40 - Len(StripAtx(STRING069)) / 2, 13
  2005.     Color 28
  2006.     Print STRING069
  2007.     STRING020 = ReadLine(STRING018, 12)
  2008.     AnsiPos 40 - Len(StripAtx(STRING020)) / 2, 15
  2009.     Print STRING020
  2010.     While (0 == 0) Do
  2011.         If (Inkey() == Chr(13)) Break
  2012.     EndWhile
  2013.  
  2014.     EndProc
  2015.  
  2016.  
  2017. ;------------------------------------------------------------------------------
  2018.  
  2019.     Procedure PROC010(Byte BYTE087, Var String STRING070, Var Byte BYTE088, Var String STRING071, Var Byte BYTE089, Var String STRING072)
  2020.  
  2021.     Word     WORD015
  2022.  
  2023.     If (!Exist(STRING007 + "DMS" + String(CurConf()) + ".CNF") && BOOLEAN006) Then
  2024.         WORD015 = 0
  2025.     Else
  2026.         WORD015 = CurConf()
  2027.     Endif
  2028.     FOpen 1, STRING007 + "DMS" + String(WORD015) + ".CNF", 2, 0
  2029.     FSeek 1, BYTE087 * 60 + 1, 0
  2030.     PROC011(1, STRING070, 35, "Untitled")
  2031.     PROC011(1, STRING071, 8, "")
  2032.     FRead 1, BYTE088, 1
  2033.     FRead 1, BYTE089, 1
  2034.     PROC011(1, STRING072, 12, "")
  2035.     FClose 1
  2036.  
  2037.     EndProc
  2038.  
  2039.  
  2040. ;------------------------------------------------------------------------------
  2041.  
  2042.     Function FUNCTION004(Integer INTEGER013, String STRING073) Boolean
  2043.  
  2044.     String   STRING074
  2045.     Word     WORD016
  2046.  
  2047.     If (Exist(STRING007 + "DMSKEY.IDX")) Then
  2048.         INTEGER003 = 0
  2049.         INTEGER004 = FileInf(STRING007 + "DMSKEY.IDX", 4) / 20 - 1
  2050.         FUNCTION004 = 0
  2051.         FOpen INTEGER013, STRING007 + "DMSKEY.IDX", 2, 0
  2052.         While ((INTEGER003 <= INTEGER004) && !FUNCTION004) Do
  2053.             INTEGER005 = (INTEGER003 + INTEGER004) / 2
  2054.             FSeek INTEGER013, INTEGER005 * 20, 0
  2055.             PROC011(INTEGER013, STRING074, 8, "")
  2056.             PROC011(INTEGER013, STRING020, 8, "")
  2057.             FRead INTEGER013, WORD001, 2
  2058.             If (RTrim(STRING074, Chr(32)) == STRING073) Then
  2059.                 FUNCTION004 = 1
  2060.                 Continue
  2061.             Endif
  2062.             If (RTrim(STRING074, Chr(32)) < STRING073) Then
  2063.                 INTEGER003 = INTEGER005 + 1
  2064.                 Continue
  2065.             Endif
  2066.             INTEGER004 = INTEGER005 - 1
  2067.         EndWhile
  2068.         FClose INTEGER013
  2069.         STRING021 = STRING074
  2070.     Endif
  2071.  
  2072.     EndFunc
  2073.  
  2074.  
  2075. ;------------------------------------------------------------------------------
  2076.  
  2077.     Procedure PROC013(Word WORD016, String STRING075)
  2078.  
  2079.     Byte     BYTE090
  2080.     Byte     BYTE091
  2081.     String   STRING076
  2082.     String   STRING077
  2083.     String   STRING078
  2084.  
  2085.     FOpen 1, STRING007 + STRING075 + ".CAT", 2, 0
  2086.     FSeek 1, WORD016 * 260 + 1, 0
  2087.     PROC011(1, STRING020, 50, "Untitled")
  2088.     PROC011(1, STRING078, 8, " NONE ")
  2089.     FRead 1, BYTE090, 1
  2090.     FRead 1, BYTE091, 1
  2091.     If (Psa(7)) Then
  2092.         FSeek 1, 88, 1
  2093.         PROC011(1, STRING077, 7, "0")
  2094.         PROC011(1, STRING076, 7, "0")
  2095.     Endif
  2096.     FClose 1
  2097.     If (((STRING078 == " NONE ") || (CurSec() < BYTE090)) || (BYTE033 < BYTE091)) Then
  2098.         PROC009(ReplaceStr(ReadLine(STRING018, 17), "@AREA@", RTrim(STRING020, Chr(32))))
  2099.         Color 7
  2100.         Cls
  2101.         Goto LABEL037
  2102.     ElseIf ((Psa(7) && (PCBAccStat(0) == "2")) && ((PCBAccStat(4) < STRING076) || (PCBAccStat(4) < STRING077))) Then
  2103.         PROC009(ReplaceStr(ReplaceStr(ReadLine(STRING018, 18), "@RCRED@", STRING077 + "/" + STRING076), "@UCRED@", PCBAccStat(4)))
  2104.         Color 7
  2105.         Cls
  2106.     Endif
  2107.     PROC005(STRING075, WORD016)
  2108.     :LABEL037
  2109.  
  2110.     EndProc
  2111.  
  2112.  
  2113. ;------------------------------------------------------------------------------
  2114. ;
  2115. ; Usage report (before postprocessing)
  2116. ;
  2117. ; ■ Statements used :
  2118. ;
  2119. ;    2       End
  2120. ;    15      Cls
  2121. ;    4       ClrEol
  2122. ;    5       Wait
  2123. ;    74      Color 
  2124. ;    404     Goto 
  2125. ;    325     Let 
  2126. ;    82      Print 
  2127. ;    13      PrintLn 
  2128. ;    295     If 
  2129. ;    10      DispFile 
  2130. ;    3       FCreate 
  2131. ;    26      FOpen 
  2132. ;    32      FClose 
  2133. ;    2       FGet 
  2134. ;    2       FPut 
  2135. ;    70      FPutLn 
  2136. ;    8       StartDisp 
  2137. ;    1       Hangup
  2138. ;    2       GetUser
  2139. ;    10      Delete 
  2140. ;    2       AdjTime 
  2141. ;    17      Log 
  2142. ;    3       InputStr 
  2143. ;    2       Delay 
  2144. ;    12      Inc 
  2145. ;    6       Dec 
  2146. ;    24      Newline
  2147. ;    3       Tokenize 
  2148. ;    2       GetToken 
  2149. ;    2       Shell 
  2150. ;    1       DispText 
  2151. ;    1       KbdFile 
  2152. ;    2       OpText 
  2153. ;    2       DispStr 
  2154. ;    6       RdUNet 
  2155. ;    8       WrUNet 
  2156. ;    47      AnsiPos 
  2157. ;    5       Backup 
  2158. ;    1       RdUSys
  2159. ;    2       MPrintLn 
  2160. ;    26      FSeek 
  2161. ;    76      FRead 
  2162. ;    15      FWrite 
  2163. ;    4       Append 
  2164. ;    3       Copy 
  2165. ;    1       KeyFlush
  2166. ;    2       WrUSysDoor 
  2167. ;    1       TpaGet 
  2168. ;    16      EndProc
  2169. ;    6       EndFunc
  2170. ;    1       Eval 
  2171. ;    5       RecordUsage 
  2172. ;
  2173. ;
  2174. ; ■ Functions used :
  2175. ;
  2176. ;    5       -
  2177. ;    22      *
  2178. ;    29      /
  2179. ;    7       %
  2180. ;    425     +
  2181. ;    89      -
  2182. ;    210     ==
  2183. ;    90      <>
  2184. ;    25      <
  2185. ;    11      <=
  2186. ;    11      >
  2187. ;    19      >=
  2188. ;    240     !
  2189. ;    103     &&
  2190. ;    57      ||
  2191. ;    62      Len(
  2192. ;    13      Upper()
  2193. ;    23      Left()
  2194. ;    22      Right()
  2195. ;    26      Space()
  2196. ;    6       Ferr()
  2197. ;    143     Chr()
  2198. ;    42      Asc()
  2199. ;    9       InStr()
  2200. ;    6       LTrim()
  2201. ;    18      RTrim()
  2202. ;    9       Date()
  2203. ;    8       Time()
  2204. ;    9       U_Name()
  2205. ;    3       U_LDate()
  2206. ;    2       U_LTime()
  2207. ;    1       U_LDir()
  2208. ;    1       U_Logons()
  2209. ;    1       U_Ful()
  2210. ;    1       U_Fdl()
  2211. ;    1       U_BdlDay()
  2212. ;    1       U_Bdl()
  2213. ;    1       U_Bul()
  2214. ;    2       Year()
  2215. ;    4       Month()
  2216. ;    2       Day()
  2217. ;    31      StripAtx()
  2218. ;    15      Replace()
  2219. ;    14      Strip()
  2220. ;    2       Inkey()
  2221. ;    46      String()
  2222. ;    1       Mask_Ascii()
  2223. ;    7       CurConf()
  2224. ;    11      PCBDat()
  2225. ;    26      PPEPath()
  2226. ;    1       U_MsgWr()
  2227. ;    39      PcbNode()
  2228. ;    57      ReadLine()
  2229. ;    1       OnLocal()
  2230. ;    9       UN_Name()
  2231. ;    3       UN_City()
  2232. ;    1       UN_Oper()
  2233. ;    4       CurSec()
  2234. ;    2       GetToken()
  2235. ;    8       MinLeft()
  2236. ;    27      Exist()
  2237. ;    1       I2S()
  2238. ;    1       Carrier()
  2239. ;    2       LangExt()
  2240. ;    2       GetX()
  2241. ;    3       GetY()
  2242. ;    70      GrafMode()
  2243. ;    11      Psa()
  2244. ;    11      FileInf()
  2245. ;    2       PPEName()
  2246. ;    6       TokCount()
  2247. ;    1       U_RecNum()
  2248. ;    5       ScrText()
  2249. ;    20      ReplaceStr()
  2250. ;    1       StripStr()
  2251. ;    2       Mixed()
  2252. ;    1       ConfReg()
  2253. ;    1       ErrCorrect()
  2254. ;    4       ChatStat()
  2255. ;    5       MegaNum()
  2256. ;    2       HiConfNum()
  2257. ;    1       PCBMac()
  2258. ;    18      PCBAccStat()
  2259. ;
  2260. ;------------------------------------------------------------------------------
  2261. ;
  2262. ; Analysis flags : ABMSdH
  2263. ;
  2264. ; A - Adjust online time remaining ■ 5
  2265. ;     Program modify the amount of online time remaining, this may
  2266. ;     be a way to bypass time limits
  2267. ;     ■ Search for : ADJTIME
  2268. ;
  2269. ; B - Brute hangup ■ 1
  2270. ;     Program hangup without notification. This may be a good way to
  2271. ;     disconnect a user, but if used randomly, may be very nasty
  2272. ;     ■ Search for : HANGUP, DTROFF
  2273. ;
  2274. ; M - Send text to modem only ■ 4
  2275. ;     Some informations are sent only to the modem, not to the local
  2276. ;     screen, this is a well known way to make stealth backdoors, Check!
  2277. ;     ■ Search for : SENDMODEM, MPRINT, MPRINTLN
  2278. ;
  2279. ; S - Shell to DOS ■ 5
  2280. ;     This may be normal if the PPE need to execute an external command,
  2281. ;     but may be actually anything... nasty (formating HD, rebooting,...)
  2282. ;     or usefull (sorting, maintenance,...). Check!
  2283. ;     ■ Search for : SHELL
  2284. ;
  2285. ; d - Access PCBOARD.DAT ■ 2
  2286. ;     Program gets the full pathname to PCBOARD.DAT, this may be usefull
  2287. ;     for many PPE so they can find various informations on the system
  2288. ;     (system paths, max number of lines in messages, ...) but it may also
  2289. ;     be a way to gather vital informations.
  2290. ;     ■ Search for : PCBDAT()
  2291. ;
  2292. ; H - Read Password or Password History ■ 5
  2293. ;     Program is reading the user's password or last password history
  2294. ;     This may be ok for a password manager, but it is very suspect. Check!
  2295. ;     ■ Search for : U_PWDHIST, U_PWD
  2296. ;
  2297. ;------------------------------------------------------------------------------
  2298. ;
  2299. ; Postprocessing report
  2300. ;
  2301. ;    7       For/Next
  2302. ;    9       While/EndWhile
  2303. ;    170     If/Then or If/Then/Else
  2304. ;    7       Select Case
  2305. ;
  2306. ;------------------------------------------------------------------------------
  2307. ;                 AEGiS Corp - Break the routines, code against the machines!
  2308. ;------------------------------------------------------------------------------
  2309.